2016-06-07 2 views
0

두 가지 레벨로 데이터를 그룹화 한 후 둘 이상의 레벨이있는 ​​경우 데이터 세트의 열을 인코딩하려고합니다. 간단히 mtcars 데이터를 예제로 사용하고 있습니다. "오류 : 필터 조건이 논리 벡터로 평가되지 않습니다."오류가 계속 나타납니다.Dplyr을 사용하여 그룹 내의 여러 레벨을 인코딩하십시오.

분명히이 구문을 사용할 수 없지만 누구나 더 똑똑한 방법으로이 작업을 수행 할 수 있습니까?

df_levels <- mtcars %>% 
    group_by(mpg) %>% 
    filter(nlevels(.$gear) > 1) %>% 
    mutate(Levels = 1) ##encode with a boolean value indicating more than one level 

와 새 DF "df_levels"을 클릭하고 정렬 DF 뷰어에서 MPG로, 당신이 10.4 항목에 대한 열 "수준"= 0를 참조 할 경우에 따라서

df_levels <- df_levels %>% 
    group_by(mpg) %>% 
    filter(nlevels(.$gear) < 1) %>% 
    mutate(Levels = 0) 

데이터 그룹화 (gear = 4, gear = 5)에서 기어에 대해 하나 이상의 레벨이 있으므로 30.4 mpg와 연관된 열 "레벨"은 값 = 1을 가질 것입니다 (gear = 3 인 데이터 만 있기 때문에) . mtcars에서

+0

STR (mtcars의 $ 기어) NUM [1시 32분] 4 4 4 3 3 3 3 4 4 4 ... – Gopala

답변

1
mtcars %>% 
    group_by(cyl) %>% 
    mutate(Levels = ifelse(nlevels(as.factor(gear)) > 1, 1, 0)) 
+0

아직도 잘 모르겠다 .. mpg로 그룹화하고 장비의 nlevels에 관심이있다. 새로운 DF가 10.4 mpg 항목에 대해 Level 열에 값 '0'을, 30.4 mpg 항목에 값 '1'을 가져야합니다. @BryanGoggin도 같은 문제가 있다고 생각합니다. –

+0

질문을 편집하여 예상되는 결과가 무엇인지 명확히 할 수 있습니까? – Gopala

+1

@jacobOdom, 그룹을 mpg로 전환하면 제안한 결과를 정확하게 얻을 수 있습니다. 여기에 코드가 있습니다 :'mtcars %> % group_by (mpg) %> % 돌연변이 (Levels = ifelse (nlevels as.factor (gear))> 1, 1, 0))' –

1

변수 gear는 요소가 아닙니다, 그래서 당신이 그런

mtcars$gear<-as.factor(mtcars$gear) 
을 의미하는 생각이 시도 :

library(dplyr) 
mtcars %>% 
    group_by(cyl) %>% 
    filter(nlevels(.$gear) > 1) %>% 
    mutate(Levels = 1) 

나는 당신의 질문에 의해 확실하지 오전이 당신 것입니다 경우 그 후에는 오류가 있지만 적어도 반환하지는 않습니다.

그리고 명확하게하려면 dplyr 구문은 매우 깨끗하게 할 수 있도록이다

mtcars %>% 
group_by(cyl) %>% 
filter(nlevels(gear) > 1) %>% 
mutate(Levels = 1) 
+0

아직도 잘 모르겠다 .. mpg로 그룹화하고 장비의 nlevels와 관련이있다. 새로운 DF가 10.4 mpg 항목에 대해 Level 열에 값 '0'을, 30.4 mpg 항목에 값 '1'을 가져야합니다. –

+0

사과, 당신이하려는 일을 이해하지 못했습니다. 방금 원래 구문을 수정했습니다. @Edward R. Mazurek이 도울 수있어서 기쁩니다. –