删除数据框中任何向量中包含字符串的行

时间:2016-04-15 11:21:54

标签: r

我有一个数据框,其中包含许多包含字符串的向量我想删除包含某个字符串的行。

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),]

3 个答案:

答案 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))),]