【发布时间】:2013-05-03 17:04:52
【问题描述】:
如何解决数据框中的部分匹配问题? 可以说这是我的df df
V1 V2 V3 V4
1 ABC 1.2 4.3 A
2 CFS 2.3 1.7 A
3 dgf 1.3 4.4 A
并且我想添加一个包含数字 111 的列 V5,仅当 V1 中的值在名称中包含“f”时,以及仅当 V1 中的值包含“gf”时才添加数字 222。我会因为几个值包含“f”而遇到问题 - 还是我发出命令的顺序会处理它?
我尝试了类似的方法:
df$V5<- ifelse(df$V1 = c("*f","*gf"),c=(111,222) )
但它不起作用。
主要问题是如何告诉 R 寻找“部分匹配”?
感谢您的帮助!
【问题讨论】:
-
ifelse并没有那么多“洞察力”。 R 中的“=”符号用于分配,而不是用于测试,并且它不支持“内部”级别的分支逻辑。 -
只是给你一个想法:你可以这样使用
ifelse:ifelse(grepl("gf", df$V1), 222, ifelse(grepl("f", df$V1), 111, NA))。 But I suspect it might be a tad slower. -
ifelse构造的优点是可以简单地分配它,而无需预先将 V5 的值指定为 NA。