Уровни падения одинакового имени из всего кадра данных

KaC спросил: 12 мая 2018 в 04:26 в: r

Снижение уровня в одном факторе в кадре данных легко, а базовые R и различные пакеты предлагают несколько способов сделать это. Но есть ли способ сбросить уровни с одним и тем же именем из нескольких факторов во фреймворке?

Например, в dataframe DF есть ли способ сбросить уровень D из V1 и V2?

DF <- data.frame(V1 = factor(c("A", "B", "C", "A", "D", "E")),
                 V2=factor(c("A", "A", "A", "A", "D", "E")))

2 ответа

Есть решение
TBT8 ответил: 12 мая 2018 в 04:56

Вот пример, чтобы удалить определенный факторный уровень из всех факторов в фрейме данных.

DF <- data.frame(V1 = factor(c("A", "B", "C", "A", "D", "E")),
                 V2=factor(c("A", "A", "A", "A", "D", "E")))dropLevels <- function(col, value){
     if(is.factor(col)){
          droplevels(col, value)
     }else{col}
}DF %>% purrr::modify(~ dropLevels(., "D")) 
DJV ответил: 12 мая 2018 в 04:50

Вы можете использовать mapply и droplevels, однако вам нужно будет снова изменить переменные.

mapply(DF, FUN = function(x) droplevels(x, "D"))      V1  V2 
[1,] "A" "A"
[2,] "B" "A"
[3,] "C" "A"
[4,] "A" "A"
[5,] NA  NA 
[6,] "E" "E"
KaC ответил: 12 мая 2018 в 05:06
Спасибо. Это работает, но я думаю, что ответ TBT8 более прост.
KaC ответил: 12 мая 2018 в 05:06
Спасибо. Это работает, но я думаю, что ответ TBT8 более прост.
DJV ответил: 12 мая 2018 в 05:20
Спасибо, и я рад, что смогу помочь. @ Ответ TVT8 действительно несколько более прост. Я также дал ему голосование :)