我想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