【问题标题】:merge several columnts with NAs into one [duplicate]将带有NA的几列合并为一个[重复]
【发布时间】:2019-03-13 20:51:17
【问题描述】:

我有几列包含非重叠数据:

a <- c(rep(1, 10), rep(NA, 20))
b <- c(rep(NA, 10), rep(2, 10), rep(NA, 10))
c <- c(rep(NA, 20), rep(3, 10))
data <- cbind(a, b, c)

输出:

       a  b  c
 [1,]  1 NA NA
 [2,]  1 NA NA
 [3,]  1 NA NA
 [4,]  1 NA NA
 [5,]  1 NA NA
 [6,]  1 NA NA
 [7,]  1 NA NA
 [8,]  1 NA NA
 [9,]  1 NA NA
[10,]  1 NA NA
[11,] NA  2 NA
[12,] NA  2 NA
[13,] NA  2 NA
[14,] NA  2 NA
[15,] NA  2 NA
[16,] NA  2 NA
[17,] NA  2 NA
[18,] NA  2 NA
[19,] NA  2 NA
[20,] NA  2 NA
[21,] NA NA  3
[22,] NA NA  3
[23,] NA NA  3
[24,] NA NA  3
[25,] NA NA  3
[26,] NA NA  3
[27,] NA NA  3
[28,] NA NA  3
[29,] NA NA  3
[30,] NA NA  3

使用dplyr将这N列(不止3列)折叠成一列的方法是什么,所以

result <- c(rep(1, 10), rep(2, 10), rep(3, 10))

当然,在真实数据而不是(1, 2, 3) 中,实际数据是完全不同的东西,它唯一的共同属性是它不是NA

【问题讨论】:

  • dplyr::coalesce 也许?

标签: r dplyr


【解决方案1】:

在基础 R 中,

  1. 对于数字,您可以使用rowSums
    rowSums(data, na.rm = TRUE)
  1. 对于非数字,max.col 可用于识别具有非 NA 值的列
   data[cbind(1:NROW(data), max.col(!is.na(data)))]

【讨论】:

  • 看来data %&gt;% transmute(newcol = coalesce(a, b, c)) 可以解决问题
猜你喜欢
  • 1970-01-01
  • 2014-04-15
  • 1970-01-01
  • 2012-05-12
  • 1970-01-01
  • 2022-11-19
  • 2020-11-26
  • 2013-08-22
相关资源
最近更新 更多