【问题标题】:R - Create data frame which checks for NAs in multiple data framesR - 创建检查多个数据帧中的 NA 的数据帧
【发布时间】:2021-01-30 23:57:21
【问题描述】:

我有两个数据框,例如

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(78,2,NA,24,25,26),
                   `X1981` = c(435,33,45,5,10,12))

我想创建一个新的数据框 (df3),以保持公司列不变。如果一个或两个值都是 NA,则 1980 年和 1981 年的值应为 0,如果两个值都不是 NA,则应为 1。 产生以下数据框:

result df3
        Company  1980  1981
           A       1     1
           B       0     1
           C       0     1
           D       1     0
           E       1     0
           F       1     1

我是新来的,所以如果有什么方法可以改进我的问题,请告诉我 :) 已经感谢您的帮助!

【问题讨论】:

    标签: r time-series compare na


    【解决方案1】:

    这里是单线。

    cbind(df1[1], (!is.na(df1[-1]) & !is.na(df2[-1])) + 0L)
    #  Company X1980 X1981
    #1       A     1     1
    #2       B     0     1
    #3       C     0     1
    #4       D     1     0
    #5       E     1     0
    #6       F     1     1
    

    数据,已更正

    df1 <- data.frame(Company = c('A','B','C','D','E','F'),
                      `1980` = c(21,NA,53,57,11,26),
                      `1981` = c(35,33,45,NA,NA,12))
    df2 <- data.frame (Company = c('A','B','C','D','E','F'),
                       `1980` = c(78,2,NA,24,25,26),
                       `1981` = c(435,33,45,5,10,12))
    

    【讨论】:

    • 非常感谢您的快速帮助,并对原始问题中的错误表示歉意:)
    • @ConnorUhl 注意列名。在 R 中,名称必须以字母字符开头,除非您在创建数据框时设置参数 check.names = FALSE
    • 再次感谢!我已经在原始问题中更改了它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    • 2014-12-22
    • 2020-07-01
    • 1970-01-01
    • 2020-05-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多