Найти и заменить много факторов в одном столбце в R

У меня есть столбец с 32 различными уровнями. Мне нужно заменить эти уровни

 ?
 diet
 diet contr
 IDDM
 Note
 Other
 denial
 Resolved
 Unsure

в этом столбце на Нет

Я знаю, что могу сделать это, используя массивный оператор ifelse((column = "?" | column = "diet" |.....) , мне было интересно, есть ли эффективный способ заменить этот пакет факторов?


person Ernest Presley    schedule 24.03.2015    source источник


Ответы (2)


Вы можете использовать %in% вместе с levels() и функцией замены levels<-. Например, с вектором выборки x

( x <- factor(c("diet", "diet contr", "IDDM", "Note", "Other", 
      "denial", "Resolved", "Unsure")) )
# [1] diet       diet contr IDDM       Note       Other     
# [6] denial     Resolved   Unsure    
# 8 Levels: denial diet diet contr IDDM Note ... Unsure

чтобы изменить «диета», «Примечание» и «Другое» на «Нет», вы можете изменить их соответствующие уровни с помощью

levels(x)[levels(x) %in% c("diet", "Note", "Other")] <- "No"
x
# [1] No         diet contr IDDM       No         No        
# [6] denial     Resolved   Unsure    
# Levels: denial No diet contr IDDM Resolved Unsure
person Rich Scriven    schedule 24.03.2015

Вы можете использовать функцию mapvalues из пакета plyr. Попробуйте этот фрагмент кода, в котором предполагается, что у вас есть столбец фактора во фрейме данных с именем df$column:

library(plyr)
vals_to_replace <- c("diet", "diet contr", "IDDM")
mapvalues(df$column,
          from = vals_to_replace,
          to = rep("No", length(vals_to_replace)))

Вы можете добавить столько имен факторов в vals_to_replace, сколько захотите.

person Tim Biegeleisen    schedule 24.03.2015