我有一個數據幀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
也不能使用的字符串。
我知道有很多的方法,我可以用其中LatinName
IS在matches
行子集rawdata
,但我不能想出一個巧妙的方法進行子集rawdata
這樣LatinName
沒有在matches
。
在此先感謝您的幫助!
就否定了'%在%'運營商 - !'RAWDATA%>%濾波器((LatinName %in%matches))' – thelatemail
@ thelatemail的方法是這裏的方法。但是爲了將來的參考,如果你確實需要將一個字符串向量轉換爲一個正則表達式,你可以使用'grepl'或'grep'來使用,例如'match.string = paste(matches,collapse =「|」) )'。 – eipi10
@thelatemail是完美的!謝謝。我只是不知道如何編寫否定操作。 – AFH