r - 如何比较 R 中多个数据集中同一位置的每个值

标签 r data-comparison

假设我有三个具有相同形式的数据集。

set.seed(1)
df1<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
set.seed(2)
df2<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))
set.seed(3)
df3<-as.data.frame(matrix(sample(c(1:4),15,replace=T),nrow=5))

df1              df2               df3
  V1 V2 V3         V1 V2 V3          V1 V2 V3
1  2  4  1       1  1  4  3        1  1  3  3
2  2  4  1       2  3  1  1        2  4  1  3
3  3  3  3       3  3  4  4        3  2  2  3
4  4  3  2       4  1  2  1        4  2  3  3
5  1  1  4       5  4  3  2        4  3  3  4

我想要做的是,如果三个数据集中同一位置的三个值中至少有一个大于 3,则将值分配为 1,否则为 0。我期望的输出将是

newdf
  V1 V2 V3  
1  0  1  0
2  1  1  0
3  0  1  1
4  1  0  0
5  1  0  1 

将三个数据集合并为一个可能是一种解决方案。但是,因为我的数据非常庞大,我怀疑这种方式是个好主意。任何建议将不胜感激!

最佳答案

这是一个可能的解决方案,可以让您免于合并数据集

(((df1 > 3L) + (df2 > 3L) + (df3 > 3L)) > 0L) + 0L
#      V1 V2 V3
# [1,]  0  1  0
# [2,]  1  1  0
# [3,]  0  1  1
# [4,]  1  0  0
# [5,]  1  0  1

或者类似

(Reduce(`+`, list(df1 > 3L, df2 > 3L, df3 > 3L)) > 0L) + 0L

这里的想法是检查每个数据集中的每个值是否大于3,然后将TRUE结果相加,检查总和是否为 > 0 并通过添加 0 转换为整数。这是有效的,因为 +> 是通用函数,它们具有保留数据集维度的 data.frame 方法,请参阅 ?Ops,更具体地说是方法(Ops)

关于r - 如何比较 R 中多个数据集中同一位置的每个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32677816/

相关文章:

r - 如何在 Leaflet for R 中基于 addLayerControl() 隐藏/切换图例

r - 将参数传递给 R DBI 中的查询的正确方法

在 R shiny 中双击将 plotoutput 替换为 leafletoutput

SQL Server 查询与 Excel VLookup 具有相同功能

mySQL选择不同数据库中两个表之间的差异

r - 带有过滤条件的数据表分组依据

r - 在 r 中的 for 循环内绘制多个图

excel - 在具有公共(public) ID 的单元格范围内满足多个条件时返回替代值

visual-studio-2010 - Visual Studio 2010 DataCompare 表比较