这个问题非常简单,但是如果不使用逐列迭代的for循环,我就无法做到这一点
我有两个具有相同索引列和不同列的data.frame。我想创建一个新的data.frame,比较两个data.frame中的值,如果dfB
中的值大于dfA
,则分配一个1
,否则分配一个0
。列名在两个data.frames中相等,并且行数相同。
data.frames非常简单,这里是一个示例:
dfA=data.frame(index=1:5, B=c(0,0,1,0,2), C=c(0,0,0,0,1))
dfB=data.frame(index=1:5, B=c(1,1,2,0,2), C=c(0,1,0,2,1))
> dfA
index B C
1 0 0
2 0 0
3 1 0
4 0 0
5 2 1
> dfB
index B C
1 1 0
2 1 1
3 2 0
4 0 2
5 2 1
结果应为:
> dfC
index B C
1 1 0
2 1 1
3 1 0
4 0 1
5 0 0
答案 0 :(得分:1)
如果您的data.frames如示例中所示,您可以执行以下操作:
dfC <- dfA
dfC[-1] <- as.integer(dfB[-1] > dfA[-1])
dfC
index B C
1 1 1 0
2 2 1 1
3 3 1 0
4 4 0 1
5 5 0 0
[-1]
上的 data.frame
选择第一列以外的整个data.frame。
答案 1 :(得分:0)
这是我的解决方案:
dfA=data.frame(index=1:5, B=c(0,0,1,0,2), C=c(0,0,0,0,1))
dfB=data.frame(index=1:5, B=c(1,1,2,0,2), C=c(0,1,0,2,1))
dfC <- data.frame(ifelse(dfB[-1]>dfA[-1],1,0))
结果是:
B C
1 1 0
2 1 1
3 1 0
4 0 1
5 0 0