【问题标题】:What is the best way to merge two numeric variables with missing values? [duplicate]将两个数值变量与缺失值合并的最佳方法是什么? [复制]
【发布时间】:2020-07-06 15:39:16
【问题描述】:

对于来自新 R 用户的一个可能非常基本的问题,提前道歉:我有两个不同的年龄数值变量(age1,age2),它们都包含一些缺失值。我想创建一个包含其他两个变量的所有值(所有非 NA 值)的变量,但很难做到这一点。 以这两列为例

age1 <- c(NA, 21, 22, NA, 24, 25, NA, NA)
age2 <- c(20, NA, NA, 23, NA, NA, 26, NA)
dt <- data.frame(age1, age2)

我努力将它们合并为一列,试图得到这样的结果:

dt$age <- c(20, 21, 22, 23, 24, 25, 26, NA)

我尝试过类似的方法:

dt$age[complete.cases(dt$age1)] <- dt$age1
dt$age[complete.cases(dt$age2)] <- dt$age2

dt$age[dt$age1>0] <- dt$age1
dt$age[dt$age2>0] <- dt$age2

dt$age[na.omit(dt$age1)] <- dt$age1
dt$age[na.omit(dt$age2)] <- dt$age2

但会收到错误消息,例如:

  • 要替换的项目数不是替换长度的倍数
  • 下标作业中不允许使用 NA

我觉得应该有一些简单的方法来做到这一点,但很难找到它。非常感谢任何有关解决方案的提示。

你好,比约恩

【问题讨论】:

    标签: r data-cleaning


    【解决方案1】:

    使用base R 你可以这样做:

    dt$age <- ifelse(is.na(dt$age1), dt$age2, dt$age1)
    

    或者,使用dplyr

    coalesce(age1, age2)
    

    这给了我们向量:

    [1] 20 21 22 23 24 25 26 NA
    

    如果您想在 dt 数据帧中创建 age 变量:

    dt %>% 
      mutate(age = coalesce(age1, age2))
    

    这给了我们:

      age1 age2 age
    1   NA   20  20
    2   21   NA  21
    3   22   NA  22
    4   NA   23  23
    5   24   NA  24
    6   25   NA  25
    7   NA   26  26
    8   NA   NA  NA
    

    【讨论】:

    • 太棒了,它有效!谢谢你,马特,你拯救了我的一天!
    • 很好,乐于助人!考虑选中绿色图标以接受解决方案并向其他人表明问题已得到解答。
    • 绿色图标已选中!再次感谢。
    猜你喜欢
    • 2021-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2010-12-23
    相关资源
    最近更新 更多