2015-03-24 4 views
0

У меня есть столбец с 32 различными уровнями. Мне нужно заменить эти уровниНайти и заменить многие факторы в одном столбце в R

? 
diet 
diet contr 
IDDM 
Note 
Other 
denial 
Resolved 
Unsure 

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

Я знаю, что могу сделать это, используя массивный IfElse ((столбец = «?» | Столбец = «диета» | .. ...) заявление, мне было интересно, если есть эффективный способ сделать заменить эти сумки факторов?

ответ

3

Вы можете использовать %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 
+0

, который сработал +10 :) –

1

Вы можете использовать функцию 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, как вам нравится.

+0

Я попробую это –