2017-12-29 76 views
0

두 레벨 ("예", "아니오")을 갖는 모든 계수 열을 선택하려고합니다. dpylr을 사용하고 싶지만 문제를 해결할 수 없습니다.factor "No", "Yes"레벨을 갖는 dplyr로 여러 열을 선택하십시오.

AB %>% 
    select_if(.predicate = function(x) length(levels(x))==2 & unique(x) %in% c("No", "Yes")) 
+0

당신이 샘플 데이터는 시작 지점으로 사용할 제공 할 수 있습니까? AB가 무엇인지 알려주지 않으면 질문을 해결하는 것이 어렵습니다. – petergensler

답변

1

unique(x) %in% c('No','Yes') 오히려 스칼라보다 unique(x)는 벡터에 동일한 길이를 반환합니다. 내 생각 엔 당신 아래와 같이 setequal(x,c('No','Yes'))를 사용하여 더 나을 :

library(dplyr) 

# generate the dataframe with different factor levels 
n<-100 
no_yes  <- sample(c('No','Yes'),   n, replace = T) 
no_yes_maybe <- sample(c('No','Yes','Maybe'), n, replace = T) 
no   <- sample(c('No'),    n, replace = T) 
no_maybe  <- sample(c('No','Maybe'),  n, replace = T) 

AB<-data.frame(
    no_yes, # only this column should get returned 
    no_yes_maybe, 
    no, 
    no_maybe, 
    stringsAsFactors = T 
)%>%as.tbl 

# function to return TRUE if column has only No/Yes factors. 
desired_levels <- c('No','Yes') 
predicate_function <- function(x) setequal(levels(x),desired_levels) 

# use dplyr to select columns with desired factor levels 
AB%>%select_if(predicate_function)