【问题标题】:create data.frame based on two data.frames根据两个 data.frames 创建 data.frame
【发布时间】:2018-07-13 09:30:35
【问题描述】:

这个问题非常简单,但是如果不使用逐列迭代的 for 循环,我就无法做到这一点

我有两个具有相同索引列和不同列的 data.frames。我想创建一个新的data.frame,比较两个data.frames中的值,如果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    

【问题讨论】:

  • 一行也可以:df=data.frame(1*(dfA[,-1]<dfB[,-1]))

标签: r dataframe


【解决方案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

data.frame 上的[-1] 选择除第一列之外的整个 data.frame。

【讨论】:

    【解决方案2】:

    这是我的解决方案:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-11
      • 2019-03-28
      • 2016-09-27
      • 2021-07-30
      • 1970-01-01
      相关资源
      最近更新 更多