R 使用NAs删除列表中矩阵的行

R 使用NAs删除列表中矩阵的行,r,list,matrix,na,R,List,Matrix,Na,我认识到这个问题可能是重复的 我有一个矩阵列表,对于每个矩阵,我想确定第一列中是否存在NA。我想确定它的位置(行),如果存在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 <- d

我认识到这个问题可能是重复的

我有一个矩阵列表,对于每个矩阵,我想确定第一列中是否存在NA。我想确定它的位置(行),如果存在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]))


mat1如果它仅用于第一列,我们使用
lappy
循环遍历
列表
,然后使用。匿名函数调用,获取第一列(
x[,1]
),使用(
is.NA
)检查
NA
),否定(
),即非NA元素,并将基于数据集的行子集。在那上面

list2 <- lapply(list, function(x) x[!is.na(x[,1]),, drop = FALSE])
lapply(list, function(x) x[rowSums(is.na(x)) == 0,, drop = FALSE])