R-从数据框中排除不包含某些值的行

时间:2020-04-24 11:40:05

标签: r

我有一个巨大的数据框,需要删除其中不包含向量中任何值的行(向量名称为“代码”)。

示例数据框:

final = final[['name', 'description']]
final.to_csv('some_name.csv', index=False, sep='|')

我尝试了多种选择,这是一个失败的示例:

df <- data.frame(ID = as.integer(c(10001, 10002, 10004, 10005, 10006)), 
                 X1 = as.integer(c(150, 120, 175, 160, 1)),
                 X2 = as.integer(c(1, 1412415, 16420, 19920, 150)))
> df
     ID  X1      X2
1 10001 150       1
2 10002 120 1412415
3 10003 175   16420
4 10004 160   19920
5 10005   1     150

codes <- c(120, 150)
codes <- as.integer(codes)

相反,newdf应该包含第1、2和5行,其ID号分别为10001、10002和10005:

newdf <- df[do.call(paste, df[2:3]) %in% codes,]

> newdf
[1] ID X1 X2
<0 rows> (or 0-length row.names)

2 个答案:

答案 0 :(得分:2)

这种方法很好,因为它可以缩放到以X开头的任意数量的列。

dplyr::filter_at(df, vars(starts_with("X")), any_vars(. %in% codes))

答案 1 :(得分:0)

dplyr::filter()做您想要的。它接受任何条件(例如向量X的值部分),并删除所有不符合条件的行:

library(dplyr)

df %>%
filter(X1 %in% codes | X2 %in% codes)