我知道这个问题可能是重复的。
我有一个矩阵列表,对于每个矩阵,我想确定第一列中是否存在NA。我想确定其位置(该行),如果存在不适用项,则删除该行。我想将此操作应用于列表中的所有矩阵。
mat1 <- data.frame(matrix(nrow =2, ncol =2, data = c(NA, 0,0,1)))
mat2 <- data.frame(matrix(nrow =2, ncol =5, data = c(0,0,1,2,1,NA,1,1,1,1)))
mat3 <- data.frame(matrix(nrow =3, ncol =2, data = c(NA, 0,0,1,NA,1)))
list <- list(mat1,mat2,mat3)
lapply(list, function(x) !is.na(x[,1]))
我希望将输出存储在等效列表中(例如list2)。例如list2 [[1]]将是1x2矩阵。 list2 [[2]]将是1x5矩阵。并且列表2 [[3]]将是1x2矩阵(仅在第1列中保留不包含NA的行)
答案 0 :(得分:2)
如果仅用于第一列,我们将list
与lapply
循环,然后使用an。匿名函数调用,获取第一列(x[,1]
),用(NA
检查is.na
,取反(!
),即非_NA元素并将子集的行作为子集基于数据集。在那
list2 <- lapply(list, function(x) x[!is.na(x[,1]),, drop = FALSE])
对于list
中的整个数据集,我们可以在整个数据集中使用rowSums
创建的逻辑矩阵上使用is.na
。
lapply(list, function(x) x[rowSums(is.na(x)) == 0,, drop = FALSE])