R:grep会删除所有列,即使它不匹配

时间:2018-02-02 19:04:56

标签: r

尝试从大型数据框中删除列。使用grep,当实际存在匹配列时,它可以正常工作。但是当匹配列为零时,它会丢弃所有列。

s <- s[, -grep("^Test", colnames(s))]

确认没有与Test匹配的列

> y <- grep("^Test", colnames(s))
> y
integer(0)

这里到底发生了什么?

1 个答案:

答案 0 :(得分:2)

您需要改为使用grepl!

df2 <- data.frame(ID =c(1,2,3), T = c("words", "stuff","things"))

df2[,!grepl("^Test", colnames(df2))]

  ID      T
1  1  words
2  2  stuff
3  3 things
如果没有匹配,

-grep()-grepl()会返回integer(0)

-TRUE == -1其中!TRUE == FALSE

使用!grepl()返回每个列标题的完整逻辑向量(TRUE TRUE),允许您在没有列满足条件时正确分组。换句话说,对于colname(df)[i]grepl(..., colnames(df))[i]返回您的模式匹配的TRUE,然后使用!反转以保留不匹配的值,并删除这样做。