删除多行

时间:2018-09-19 07:15:06

标签: r

我有一个庞大的数据集,其中包含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) 删除所有带有AppleTomatoPie的行。

我在这里找到此解决方案来基于特定列值删除行:Conditionally Remove Dataframe Rows with R但是,我现在要做的是不仅基于单个值,而且还基于具有多个值的向量删除行。

2 个答案:

答案 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)