我有2个矩阵(8760,318)。
A = 1 2 3 4
5 6 7 8
9 0 1 11
1 8 3 7
B = NA NA NA NA
NA NA NA NA
1 3 5 7
2 4 6 8
我想在矩阵B中找到NA值的索引,并删除矩阵A和矩阵B中与这些索引相对应的值。最后我想要
A = 9 0 1 11
1 8 3 7
B = 1 3 5 7
2 4 6 8
我也想保护矩阵形式(x,318)。到目前为止我尝试的所有方法都打破了矩阵形式并给了我一行1行。
答案 0 :(得分:0)
对于A(有点hacky,也许我会编辑)
A[!is.na(B)[,1],]
对于B
na.omit(B)
答案 1 :(得分:0)
如何将NA
A中的所有值放入B中的NA
并将na.omit()应用于A?
for (i in 1:nrow(B)) { for (j in 1:ncol(B)) { if (is.na(B[i,j])) A[i,j] = NA } }
na.omit(A)
答案 2 :(得分:0)
我建议先转换为数据框。
A <- as.data.frame(A)
# 'data.frame': 4 obs. of 4 variables:
# $ V1: num 1 5 9 1
# $ V2: num 2 6 0 8
# $ V3: num 3 7 1 3
# $ V4: num 4 8 11 7
B <- as.data.frame(B)
使用以下内容过滤掉所有条目均为NA
的行。这也确保您不会得到许多无法格式化为类似表格的结构的元素
isrowallna <- apply(B, 1, function(x) all(is.na(x)))
适当过滤数据框
A <- A[!isrowallna,]
B <- B[!isrowallna,]
恢复矩阵
A <- as.matrix(A)
# num [1:2, 1:4] 9 1 0 8 1 3 11 7
# - attr(*, "dimnames")=List of 2
# ..$ : chr [1:2] "3" "4"
# ..$ : chr [1:4] "V1" "V2" "V3" "V4"
B <- as.matrix(B)
您的数据
A = matrix(c(1, 2, 3, 4,
5, 6, 7, 8,
9, 0, 1, 11,
1, 8, 3, 7), nrow=4, byrow=TRUE)
B = matrix(c(NA, NA, NA, NA,
NA, NA, NA, NA,
1, 3, 5, 7,
2, 4, 6, 8), nrow=4, byrow=TRUE)