2014-02-13 4 views
18

데이터 프레임에 새 열을 추가하기 위해 mutate{dplyr} 함수를 사용하는 데 문제가 있습니다. 새 열을 문자 유형으로 만들고 다른 열 (문자 유형도 포함)에서 정렬 된 단어의 "연결"으로 구성해야합니다. 예를 들어, 다음과 같은 데이터 프레임 :dplyr에서 R - 열을 추가하여 열을 추가하십시오.

> library(datasets) 
> states.df <- data.frame(name = as.character(state.name), 
+       region = as.character(state.region), 
+       division = as.character(state.division)) 
> 
> head(states.df, 3) 
    name region   division 
1 Alabama South East South Central 
2 Alaska West   Pacific 
3 Arizona West   Mountain 

내가 다음 첫 번째 요소로 새 열을 좀하고 싶습니다 :

mutate(states.df, 
    concated_column = paste0(sort(name, region, division), collapse="_")) 

그러나 I :

"Alamaba_East South Central_South" 

을 나는이 시도 오류 메시지 :

Error in sort(1:50, c(2L, 4L, 4L, 2L, 4L, 4L, 1L, 2L, 2L, 2L, 4L, 4L, : 
    'decreasing' must be a length-1 logical vector. 
Did you intend to set 'partial'? 

사전에 도움을 주셔서 감사합니다!

답변

20

sep =이 아닌 collapse =을 사용해야하고 sort?을 사용해야하는 이유는 무엇입니까? 그리고 paste을 사용했지만 paste0을 사용하지 않았습니다.

library(dplyr) 
states.df <- data.frame(name = as.character(state.name), 
         region = as.character(state.region), 
         division = as.character(state.division)) 
res = mutate(states.df, 
    concated_column = paste(name, region, division, sep = '_')) 

정렬이 끝나면 sort을 올바르게 사용하지 마십시오. 아마 당신이 원하는 :

as.data.frame(lapply(states.df, sort)) 

이 각 열을 정렬하고 그 열이있는 새로운 data.frame을 만듭니다.

+0

이 관심을 바울 감사 지역 및 부문으로 넥타이를 나누기! 나는 당신의 제안을 따랐지만 당신의 코드에서 작동하지만, 단어를 정렬하려고 할 때 (나는'paste (sort (name, region, division), sep = '_'))') . (내 설명에서 위와 같은 오류). –

+0

'sort'의 문서를주의 깊게 읽어야 만합니다.'sort'는 벡터를 입력으로 받아서 정렬 된 버전을 반환합니다. 당신은 그것을 세 가지 벡터로 보냅니다. 이것은 당신이 어떻게 정렬을 사용해야하는지 아닙니다. 너는 정확히 무엇을하고 싶니? –

+0

오크, 오케이, 이해합니다 (이 설명에 감사드립니다!). 내 실제 경우에는 3 개의 열이있는 데이터 집합이 있습니다. 3 개의 열은 하나의 동작 세트에서 오는 3 개의 동작을 나타냅니다. 나는이 세 가지 행동이 취해진 순서에 대해 더 이상 신경 쓰지 않는다. 그래서이 변수들을 하나의 변수 값으로 바꾸고 싶다.이 세 가지 행동의 이름을 유지할 것이고'sort'는 순서를 돌보지 않으려 고 의도했다. . –

2

Paul의 답변에 덧붙이십시오. 행을 정렬하려면 order을 시도하십시오. 다음은 그 예이다 : 여기

res1 <- mutate(states.df, 
      concated_column = apply(states.df[order(name, region, division), ], 1, 
            function(x) paste0(x, collapse = "_"))) 

순서는 이름으로 data.frame의 states.df을 정렬 한 후

+0

나는이'apply'를 사용했다. (%, %, %) %. % mutate (concated_column = paste (name, region, division, sep = '_ mutate가 변수 이름으로 행을 붙여 넣을 수 있도록 허용하십시오! 나를 올바른 방향으로 데려다 주셔서 감사합니다! mutate (tbl, var = apply (. [, c ('varA', 'varB')], 1, function (x) paste (x, collapse = "")))' –

관련 문제