消除与字符串匹配的数据框行
Eliminate dataframe rows that match a character string
我有一个数据框 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
也不能使用字符串
我知道有很多方法可以使用 matches
中 LatinName
所在的行对 rawdata
进行子集化,但我想不出一个巧妙的子集化方法rawdata
这样 LatinName
不在 matches
中。
在此先感谢您的帮助!
filteredData <- rawdata[!(rawdata$LatinName %in% Matches), ]
另一种使用 subset、paste、mapply 和 grepl 的方法是...
fileteredData <- subset(rawdata,mapply(grepl,rawdata$LatinName,paste(Matches,collapse = "|")) == FALSE)
我有一个数据框 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
也不能使用字符串
我知道有很多方法可以使用 matches
中 LatinName
所在的行对 rawdata
进行子集化,但我想不出一个巧妙的子集化方法rawdata
这样 LatinName
不在 matches
中。
在此先感谢您的帮助!
filteredData <- rawdata[!(rawdata$LatinName %in% Matches), ]
另一种使用 subset、paste、mapply 和 grepl 的方法是...
fileteredData <- subset(rawdata,mapply(grepl,rawdata$LatinName,paste(Matches,collapse = "|")) == FALSE)