代码之家  ›  专栏  ›  技术社区  ›  Philipp Chapkovski

将多列与NAS合并为一列

  •  0
  • Philipp Chapkovski  · 技术社区  · 6 年前

    这个问题已经有了答案:

    我有几个专栏 不重叠 其中的数据:

    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
    

    如何将这些n列(超过3列)折叠为一个使用 dplyr 如此

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

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

    0 回复  |  直到 6 年前
        1
  •  3
  •   d.b    6 年前

    在R基,

    1. 对于数字,可以使用 rowSums
        rowSums(data, na.rm = TRUE)
    
    1. 对于非数字, max.col 可用于标识列 NA 价值观
       data[cbind(1:NROW(data), max.col(!is.na(data)))]
    
    推荐文章