我有一个巨大的数据框,需要删除其中不包含向量中任何值的行(向量名称为“代码”)。
示例数据框:
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)
答案 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)