我想grep列名并保持精确匹配。我无法避免部分匹配。这是一个更复杂用例的简单例子。避免grep中的部分匹配
keep <- c("A", "AA", "B") # I get this dynamically in my actual use case
mydata <- data.frame(A=c(1, 1, 1),
AA=c(1, 1, 1),
B=c(1, 1, 1),
BB=c(1, 1, 1),
C=c(1, 1, 1))
pattern <- paste(keep, collapse = "|")
mydata.subset <- mydata[grep(pattern, colnames(mydata), value=TRUE)]
names(mydata.subset)
# [1] "A" "AA" "B" "BB"
B
是keep
,但不BB
。如何在不诉诸明确指定BB
的方法的情况下排除部分匹配如BB
?我很犹豫要求只有grep()
的例子,但我认为我需要,因为我的实际情况更复杂,并且基于grep()
解决方案。
也试过
mydata.subset <- mydata[grep(pattern, colnames(mydata), fixed=TRUE)]
names(mydata.subset)
# character(0)
你知道你可以做'mydata [keep]'? – flodel 2014-08-30 14:15:06
@ flodel:+1唯一的区别是它不保留原始的列顺序(也许'保持'向量可以随机排序...) – digEmAll 2014-08-30 14:20:10
两个有用的答案。两方面都学到了新东西。谢谢。 – 2014-08-30 14:21:44