首页 > 解决方案 > 如何将包含 NA 的行合并为 r 中的一个?

问题描述

这是我的数据:

data<-structure(c(1, NA, 2, NA, NA, 9), .Dim = 2:3, .Dimnames = list(
    c("1", "2"), NULL), .Names = c("1", "2", NA, NA, NA, NA))

我的每一行都有 NA,但行彼此对应(如果一行有 NA,则同一列中的另一行有一个值)

  [,1] [,2] [,3]
1    1    2   NA
2   NA   NA    9

这是所需的输出:

   [,1] [,2] [,3]
1    1    2    9



structure(c(1, 2, 9), .Dim = c(1L, 3L), .Dimnames = list("1", 
    NULL))

标签: rmerge

解决方案


严格假设NA每一列的非值的数量相同,可以做到

t(apply(data, 2, na.omit))
#      [,1] [,2] [,3]
# [1,]    1    2    9

这个例子的需求t(..)是不同的,因为apply 这里会自动简化为一个向量,而不是一个数组。如果您的数据产生两个以上的非NA值,那么您可以不使用t(..)

data <- rbind(data, data)
data
#   [,1] [,2] [,3]
# 1    1    2   NA
# 2   NA   NA    9
# 1    1    2   NA
# 2   NA   NA    9
apply(data, 2, na.omit)
#      [,1] [,2] [,3]
# [1,]    1    2    9
# [2,]    1    2    9

@akrun 提出了一个很好的观点:如果一列是 all NA,这将失败。这是一个轻微的修复:

apply(data, 2, function(z) { out <- na.omit(z); if (!length(out)) NA else out; })
#      [,1] [,2] [,3]
# [1,]    1    2    9
# [2,]    1    2    9

推荐阅读