在R中的一列中查找并替换多个因子

时间:2015-03-24 02:58:27

标签: r if-statement grepl

我有32个不同级别的列。我需要替换这些级别

 ?
 diet
 diet contr
 IDDM
 Note
 Other
 denial
 Resolved
 Unsure

在该列中

我知道我可以使用一个巨大的ifelse((column =“?”| column =“diet”| .....)语句来做到这一点,我想知道是否有一种有效的方法来替换这些包因素?

2 个答案:

答案 0 :(得分: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

改变&#34;饮食&#34;,&#34;注意&#34;和&#34;其他&#34;所有到&#34;否&#34;您可以使用

更改各自的级别
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

答案 1 :(得分: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添加任意数量的因子名称。