尝试从大型数据框中删除列。使用grep
,当实际存在匹配列时,它可以正常工作。但是当匹配列为零时,它会丢弃所有列。
s <- s[, -grep("^Test", colnames(s))]
确认没有与Test
匹配的列
> y <- grep("^Test", colnames(s))
> y
integer(0)
这里到底发生了什么?
答案 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
,然后使用!
反转以保留不匹配的值,并删除这样做。