我有一个庞大的数据集,其中包含500,000个条目,如下所示。
master branch
从那开始,我想有条件地将所有具有Country Region Code Product name Year Value
Sweden Stockholm 123 Apple 1991 244
Sweden Kirruna 123 Apple 1987 100
Japan Kyoto 543 Pie 1987 544
Denmark Copenhagen 123 Apple 1998 787
Denmark Copenhagen 123 Apple 1987 100
Denmark Copenhagen 543 Pie 1991 320
Denmark Copenhagen 126 Candy 1999 200
Sweden Gothenburg 126 Candy 2013 300
Sweden Gothenburg 157 Tomato 1987 150
Sweden Stockholm 125 Juice 1987 250
Sweden Kirruna 187 Banana 1998 310
Japan Kyoto 198 Ham 1987 157
Japan Kyoto 125 Juice 1987 550
Japan Tokyo 125 Juice 1991 100
的行与带有code
的向量中的值相对应。像这样一个:
code
也就是说,应基于向量中的A <- c(123, 157, 543)
删除所有带有Apple
,Tomato
和Pie
的行。
我在这里找到此解决方案来基于特定列值删除行:Conditionally Remove Dataframe Rows with R但是,我现在要做的是不仅基于单个值,而且还基于具有多个值的向量删除行。
答案 0 :(得分:3)
使用sqldf
:
sqldf("select * from df where Code NOT IN (123,157,543)")
答案 1 :(得分:1)
我们可以使用%in%
创建一个逻辑向量,并在!
内否定(subset
)(不使用任何包)
subset(df1, !Code %in% A)
或使用filter
中的dplyr
library(dplyr)
df1 %>%
filter(!Code %in% A)
如果我们要使用新的数据框,则可以将值写回到df1
(它将完全替代数据框的先前(未过滤)版本)或将其写入新数据框(df2
)并进行处理。最好选择将值写到新的数据框中,以防万一我们意外地做了并且丢失了数据
赞:
library(dplyr)
df2 <- df1 %>%
filter(!Code %in% A)