如何将包含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))

回答

严格假设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


以上是如何将包含NA的行合并为r中的一行?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>