2016-11-17 3 views
0

Например, у меня есть фрейм данных с 6 столбцами (все факторы). Я хочу удалить specefic level, например «no», из всех факторов, в которых отображается этот уровень.Как удалить один определенный уровень фактора во всех фактор-переменных в r?

Я хочу отказаться от уровня фактора «нет» от моей переменной фактора, и в то же время я хочу удалить (установить для NA) все ответы, имеющие значение «нет».

Я попробовал этот код:

sapply(fact,function(x) levels(x)[levels(x) == "no"] <- NULL) 

Но этот код не работает.

Как я могу это сделать?

+0

Это не является прямым анс но подумайте о том, подходит ли «каплей» в вашем случае. Если это так, ваш код упрощает 'lapply (fact, droplevels)'. –

+1

@ KonradRudolph, в таком случае они могли бы просто использовать «пудры (факт)» –

+0

Как отметил Конрад, ваш вопрос непонятен. Вы хотите отказаться от наблюдения с «нет» в качестве ответа, или они были удалены, и вы просто хотите удалить этот уровень из уровней факторов? – lmo

ответ

2

Я думаю, что это должно выполнить то, что вы пытаетесь сделать.

dfNew <- data.frame(lapply(df, function(x) {is.na(x[x=="no"]) <- TRUE; droplevels(x)})) 

данные

set.seed(1234) 
df <- data.frame(q1=sample(c("yes", "no", "maybe"), 20, replace=TRUE), 
       q2=sample(c("yes", "no", "maybe"), 20, replace=TRUE), 
       q3=sample(c("yes", "no", "maybe"), 20, replace=TRUE)) 
2

Как об этом:

> df 
    # c1 c2 c3 
# 1 yes yes no 
# 2 no ok yes 
# 3 ok no ok 
# 4 yes yes no 
# 5 no ok yes 
# 6 ok no ok 
# 7 yes yes no 
# 8 no ok yes 
# 9 ok no ok 

toRemove <- "no" 
data.frame(lapply(df, 
      function(x) factor(as.character(x), levels=levels(x)[levels(x)!=toRemove]))) 

    # c1 c2 c3 
# 1 yes yes <NA> 
# 2 <NA> ok yes 
# 3 ok <NA> ok 
# 4 yes yes <NA> 
# 5 <NA> ok yes 
# 6 ok <NA> ok 
# 7 yes yes <NA> 
# 8 <NA> ok yes 
# 9 ok <NA> ok 

игрушка данные

df <- structure(list(c1 = structure(c(3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L, 
2L), .Label = c("no", "ok", "yes"), class = "factor"), c2 = structure(c(3L, 
2L, 1L, 3L, 2L, 1L, 3L, 2L, 1L), .Label = c("no", "ok", "yes" 
), class = "factor"), c3 = structure(c(1L, 3L, 2L, 1L, 3L, 2L, 
1L, 3L, 2L), .Label = c("no", "ok", "yes"), class = "factor")), .Names = c("c1", 
"c2", "c3"), row.names = c(NA, -9L), class = "data.frame") 
Смежные вопросы