我有一个数据框,其中包含许多包含字符串的向量我想删除包含某个字符串的行。
df <- data.frame(id=seq(1:10),
foo=runif(10),
sapply(letters[1:5],function(x) {sample(letters,10,T)} ),
bar=runif(10))
这可以通过指定矢量名称在单个矢量上完成,即
df <- df[!grepl("b", df$a),]
然后我可以重复指定每个矢量,例如
df <- df[!grepl("b", df$b),]
df <- df[!grepl("b", df$c),]
df <- df[!grepl("b", df$d),]
df <- df[!grepl("b", df$e),]
但是可以在一行中完成,而不必指定哪些列包含字符串?类似的东西:
df <- df[!grepl("b", df),]
答案 0 :(得分:5)
你可以尝试
df[-which(df=="b", arr.ind=TRUE)[,1],]
或者,正如@docendodiscimus
所建议的那样df[rowSums(df == "b") == 0,]
第二个选项更可取,因为如果找不到匹配的模式,它不会带来任何困难。
答案 1 :(得分:3)
粘贴列然后grepl:
df[!grepl("b", paste0(df$a, df$b, df$c, df$d, df$e)), ]
识别因子(或字符列)然后粘贴:
df[!grepl("b",
apply(df[, sapply(df, class) == "factor"], 1, paste0, collapse = ",")), ]
答案 2 :(得分:1)
target_cols <- c("a", "b", "c", "d", "e")
df[!Reduce(`|`, lapply(df[,target_cols], function(col) grepl("b", col))),]