基于两个data.frames创建data.frame

时间:2018-07-13 09:30:35

标签: r dataframe

这个问题非常简单,但是如果不使用逐列迭代的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    

2 个答案:

答案 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