2

我有一个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也不能使用字符串。

我知道有很多方法可以使用IS inrawdata的行进行子集化,但我想不出一种巧妙的方法来子集化,例如NOT in 。LatinNamematchesrawdataLatinNamematches

在此先感谢您的帮助!

4

2 回答 2

2
filteredData <- rawdata[!(rawdata$LatinName %in% Matches), ]
于 2015-10-20T04:52:28.173 回答
0

使用子集、粘贴、映射和 grepl 的另一种方法是......

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

于 2015-10-20T05:31:05.170 回答