假设我有三个具有相同形式的数据集。
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/