【问题标题】:Merge values from two columns to overwrite NAs in same row in R合并两列中的值以覆盖 R 中同一行中的 NA
【发布时间】:2019-11-25 13:16:29
【问题描述】:

我有两列(a 和 b)要“合并”,这样“a”只会覆盖“b”中存在 NA 的值。

基本上,我希望“b”中的 PAV 和 SAV 保留。

我尝试了以下代码:

MergingTABLE$c <- ifelse(is.na(MergingTABLE$b), MergingTABLE$a, MergingTABLE$b)

但它给了我数字而不是复制值。

MergingTABLE <- data.frame(a = c("NOO","NOO","POR","NOO","SAV","WAT","SAV","PAV","COM","WAT"),
                          b = c(NA,NA,"PAV",NA,"SAV",NA,NA,NA,NA,NA))

我想要一个输出列,它是两者的组合,但在 a 和 b 都具有非 NA 值时使用 b 中的值。

【问题讨论】:

  • 您可能将这些列作为因子,因为这是data.frame 的默认值。您可以在创建数据框时添加stringsAsFactors = F,也可以将ifelse 中的列包装为as.character

标签: r replace merge na


【解决方案1】:

使用dplyr:

library(dplyr)
MergingTABLE %>% 
  mutate(c = if_else(is.na(b), a, b))

【讨论】:

    【解决方案2】:

    使用data.table:

    library('data.table')
    setDT(MergingTABLE)
    MergingTABLE[!is.na(b), c := b]
    MergingTABLE[is.na(b), c := a]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-21
      • 1970-01-01
      • 2022-11-29
      • 2023-01-12
      • 2013-01-05
      • 2011-06-21
      • 2015-10-02
      • 1970-01-01
      相关资源
      最近更新 更多