【发布时间】:2018-01-10 19:26:52
【问题描述】:
我正在尝试找出一种方法,让我在 mutate() 的多个列上仅使用一个部分模式的 grepl()。如果一组列中的任何一个包含某个字符串,我想要一个新列将是 TRUE 或 FALSE。
df <- structure(list(ID = c("A1.1234567_10", "A1.1234567_20"),
var1 = c("NORMAL", "NORMAL"),
var2 = c("NORMAL", "NORMAL"),
var3 = c("NORMAL", "NORMAL"),
var4 = c("NORMAL", "NORMAL"),
var5 = c("NORMAL", "NORMAL"),
var6 = c("NORMAL", "NORMAL"),
var7 = c("NORMAL", "ABNORMAL"),
var8 = c("NORMAL", "NORMAL")),
.Names = c("ID", "var1", "var2", "var3", "var4", "var5", "var6", "var7", "var8"),
class = "data.frame", row.names = c(NA, -2L))
ID var1 var2 var3 var4 var5 var6 var7 var8
1 A1.1234567_10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL
2 A1.1234567_20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL
我试过了
df$abnormal %>% mutate( abnormal = ifelse(grepl("abnormal",df[,119:131]) , TRUE, FALSE)))
还有大约 100 件其他事情。我希望最终格式为
ID var1 var2 var3 var4 var5 var6 var7 var8 abnormal
1 A1.1234567_10 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL FALSE
2 A1.1234567_20 NORMAL NORMAL NORMAL NORMAL NORMAL NORMAL ABNORMAL NORMAL TRUE
我每次尝试都会出错
【问题讨论】:
-
几个问题 - 首先,您的示例数据中包含“异常”的数据似乎不一致,但您的代码检查了“可疑”。其次,您真的需要
grepl- 我的意思是您需要在字符串中搜索模式,还是相等检查有效?相等性检查会更容易和更有效,但它只适用于完全匹配,即“此主题异常”需要grepl才能匹配。 -
但是如果你可以检查是否相等,你可以做
df$abnormal = rowSums(select(df, starts_with("var")) == "ABNORMAL") > 0。 (如果您愿意,也可以使用mutate)。 -
@Gregor 嗨,我编辑它说异常。真正的数据框将包含“Suspected_13”或“Suspected_15”或“Suspected_18”之类的内容,所以我真的需要选择字符串“Suspected”