消除与字符串匹配的数据帧行

时间:2015-10-20 04:41:18

标签: r filter subset dplyr grepl

我有一个数据框rawdata,其中的列包含生态信息。我试图消除列LatinName匹配我已经拥有一些数据的物种向量的所有行,并创建一个只有缺少数据的物种的新数据帧。所以,我想做的是:

matches <- c("Thunnus thynnus", "Balaenoptera musculus", "Homarus americanus") 
# obviously these are a random subset; the real vector has ~16,000 values 
rawdata_missing <- rawdata %>% filter(LatinName != "matches") 

这不起作用,因为布尔运算符不能应用于字符串。或者我可以这样做:

rawdata_missing <- filter(rawdata, !grepl(matches, LatinName) 

这不起作用,因为!grepl也不能使用字符串。

我知道有很多方法可以使用rawdata LatinNamematches的行来rawdata进行子集化,但是我无法找到一种简洁的方法来LatinName 1}} matches不在linked list

提前感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

filteredData <- rawdata[!(rawdata$LatinName %in% Matches), ]

答案 1 :(得分:0)

使用子集,粘贴,mapply和grepl的另一种方法是......

fileteredData <- subset(rawdata,mapply(grepl,rawdata$LatinName,paste(Matches,collapse = "|")) == FALSE)