我想比较R中具有相同列名(df1&df2)的两个数据帧。基于其中一列(df2)中每一列的值,我要过滤另一列(df1)。对于每个列名,我需要消除df1中大于或等于df2中值的行。换句话说,需要在下面生成res1:
df1 <- data.frame( v1 = c(1,2,3,4), v2 = c(2, 10, 5, 11), v3=c(20, 25, 23, 2), v4=c(1,2,1,3) )
> df1
v1 v2 v3 v4
1 1 2 20 1
2 2 10 25 2
3 3 5 23 1
4 4 11 2 3
df2 <- data.frame(v1 = 4, v2 = 10, v3 =30, v4 = 3)
> df2
v1 v2 v3 v4
1 4 10 30 3
因此,通过基于列名称将df1中的每一行与df2相比较并消除大于或等于df2中定义的特定列阈值的行,从而生成所需的输出res1:
> res1
v1 v2 v3 v4
1 1 2 20 1
2 3 5 23 1
我们可以使用mapply
带<
符号比较两个数据帧,并rowSums
为子集建立索引,即
df1[rowSums(mapply(`<`, df1, df2)) == ncol(df1),]
# v1 v2 v3 v4
#1 1 2 20 1
#3 3 5 23 1
此外,上述内容的完全矢量化翻译可以是(@RonakShah的补充),
df1[rowSums(df1 < df2[rep(1, nrow(df1)), ]) == ncol(df1), ]
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句