【问题标题】:Conditional bind - Create new data frame based on values in 2 other data frames条件绑定 - 根据其他 2 个数据帧中的值创建新数据帧
【发布时间】:2021-02-02 09:43:34
【问题描述】:

我有两个数据框,例如

df1 <- data.frame(Company = c('A','B','C','D','E','F'),
                  `X1980` = c(21,NA,53,57,11,26),
                  `X1981` = c(35,33,45,NA,NA,12))
df2 <- data.frame(Company = c('A','B','C','D','E','F'),
                  `X1980` = c(1,0,0,1,1,0),
                  `X1981` = c(1,1,1,0,1,0))

我想创建一个新的数据框 (df3),以保持公司列不变。 1980 年和 1981 年的值应取决于 df2 中的值:如果值为 1,则插入 df1 中的值,否则插入“NA”。生成的数据框应表示以下内容:

result df3
        Company  1980  1981
           A      21    35
           B      NA    33
           C      NA    45
           D      57    NA
           E      11    NA
           F      NA    NA

感谢您的帮助! 如果我有什么办法可以改进这个问题,请告诉我。

【问题讨论】:

    标签: r rbind sqldf cbind


    【解决方案1】:

    df2 中的0s 更改为NA 并相乘:

    df2[df2 == 0] = NA
    df2[-1] = df1[-1] * df2[-1]
    df2
    #   Company X1980 X1981
    # 1       A    21    35
    # 2       B    NA    33
    # 3       C    NA    45
    # 4       D    57    NA
    # 5       E    11    NA
    # 6       F    NA    NA
    

    这是有效的,因为 NA * x = NA1 * x = x。它依赖于 df1df2 时列的顺序相同,但如果需要,可以轻松调整。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-24
      • 2022-11-29
      • 2019-08-10
      • 2017-12-30
      • 1970-01-01
      • 2019-11-18
      相关资源
      最近更新 更多