我想从数据框中删除与一个或多个字符串向量匹配的所有行。简短示例:
words <- c("abcde", "cdefg", "fghij", "efghi", "abcd", "fgh")
numbers <- c(1:6)
dat <- data.frame(words, numbers)
> dat
words numbers
1 abcde 1
2 cdefg 2
3 fghij 3
4 efghi 4
5 abcd 5
6 fgh 6
我从数据框中删除了所有行,其中列word
包含带有循环的strings
“ bcd”和“ ghi”中的一个或两个:
strings <- c("bcd", "ghi")
i <- 1
while(i <= length(strings)) {
dat <- dat[grep(strings[i], dat$words, invert = TRUE),]
i <- i + 1
}
> dat
words numbers
2 cdefg 2
6 fgh 6
是最好的方法,还是有更好的方法?
我的真实数据包含将近一百万行,并且需要排除几百个字符串,而且两组数据都在不断增长。因此,“最好”在这种情况下意味着最快并且需要最少的计算能力。
这不是R Subset Dataset Using Regular Expression的副本,因为该问题并未解决我的问题,即使用正则表达式进行子设置是否是 best 方法。
答案 0 :(得分:1)
您可以使用事实grep
接受正则表达式,并使用|
(OR)符号同时grep
一切:
> dat[grep("bcd|ghi",dat$words,invert=TRUE),]
words numbers
2 cdefg 2
6 fgh 6
如果您以某种方式将字符串读取到数组中,从而拥有大量字符串,则可以将它们粘贴到|
分隔的字符串中,如IceCreamToucan所述:
paste(strings,collapse = '|')