删除其单元格与给定向量匹配的数据帧行

时间:2012-06-12 20:18:36

标签: r dataframe subset

我有大量数据框,包含不同数量的列和行。我想在数据帧中搜索给定向量的值,并删除与给定向量的值匹配的单元格行。我想把它作为一个函数,因为我必须在可变行和列的多个数据帧上运行它,我想要避免for循环。

例如

ff<-structure(list(j.1 = 1:13, j.2 = 2:14, j.3 = 3:15), .Names = c("j.1","j.2", "j.3"), row.names = c(NA, -13L), class = "data.frame")

删除包含值8,9,10

的单元格的所有行

我想我可以使用ff[ !ff[,1] %in% c(8, 9, 10), ]subset(ff, !ff[,1] %in% c(8,9,10) )

但是为了从数据集中删除所有值,我必须解析每一列(可能使用for循环,我希望避免这种情况)。

还有其他(更干净的)方式吗?

非常感谢

2 个答案:

答案 0 :(得分:6)

apply您对每一行的测试:

keeps <- apply(ff, 1, function(x) !any(x %in% 8:10))

给出一个布尔矢量。然后用它子集:

ff[keeps,]

   j.1 j.2 j.3
1    1   2   3
2    2   3   4
3    3   4   5
4    4   5   6
5    5   6   7
11  11  12  13
12  12  13  14
13  13  14  15
> 

答案 1 :(得分:4)

我认为apply策略可能是最经济的,但也可以做以下任何一种:

 ff[ !rowSums( sapply( ff, function(x) x %in% 8:10) ) , ]
ff[ !Reduce("+", lapply( ff, function(x) x %in% 8:10) ) , ]

向量添加逻辑向量,(相当于any),然后是否定。我怀疑第一个会更快。