【问题标题】:Replace NAs in one column with the values of another in dplyr将一列中的 NA 替换为 dplyr 中另一列的值
【发布时间】:2020-08-13 02:19:30
【问题描述】:

假设我有以下数据:

dat <- read.table(text="id_1 id_2 
                  123 NA
                  456 NA
                  NA 3
                  NA 1
                  NA 1", header=T)


> dat
  id_1 id_2
1  123   NA
2  456   NA
3   NA    3
4   NA    1
5   NA    1

我希望能够“合并”这些列以生成结果 id 列,其中一列的 NA 填充有另一列的值。如果两列中都有值,我只想将唯一值粘贴到逗号分隔的列表中。像这样:

> dat
  id
1  123   
2  456   
3   3    
4   1   
5   1    

我在加入和逐行替换方面尝试了各种迭代,但我无法找出在 dplyr 链中执行此操作的正确方法。有什么想法吗?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    Tidyverse 解决方案:

    library(tidyverse)
    dat %>%
      transmute(id = coalesce(id_1, id_2))
    

    基础 R 解决方案:

    dat <- within(dat, {id <- ifelse(is.na(id_1), id_2, id_1); rm(id_1); rm(id_2)})
    

    【讨论】:

      【解决方案2】:

      我们可以使用unite

      library(dplyr)
      library(tidyr)
      
      dat %>%
        mutate_all(as.character) %>%
        unite(id, everything(), na.rm = TRUE, sep = ",")
      

      如果您在每一行中始终只有一个非 NA 值,我们可以使用 coalesce

      dat %>%  mutate(id = coalesce(id_1, id_2))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多