r - 如何将包含 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
推荐阅读
- python - 将 3 列从数据框转换为日期
- java - 使用 HTTP 请求获取最后一个 JSON 数组元素
- node.js - 如何在 Android Studio 中初始化一次套接字以使用多个活动?
- c# - 在 C# 计算器中获取/打印答案的问题
- typescript - 干净的纯 Typescript 应用程序架构的资源
- firebase - 您是否需要创建一个单独的集合/文档来读取具有 Firebase 云功能的聚合文档
- r - 从 WIndows 到 MACOS 的全局路径转换(R 语言示例)
- data-structures - 为什么要退回已删除的项目?
- datetime - 当我输入单元格时自动获取日期和时间,但在谷歌表格的单独列中
- python - 得到 ValueError:尝试使用 scikit-learn 中的 train_test_split 时解包的值太多