我的代码如下:
mat1 <- matrix(1, nrow = 1, ncol = 2)
mat1[1,1] <- NA
colnames(mat1) <- c(NA, 'Name1')
mat2 <- mat1
mylist <- list(mat1, mat2)
mylist <- lapply(mylist, function(x) x[!is.na(colnames(x))])
如果我删除名称为 NA
的列,列名称 Name1
也会从矩阵中删除。如何删除 NA
列,但保留列表中矩阵剩余列的列名?
最佳答案
使用:
lapply(mylist, function(x) x[, !is.na(colnames(x)), drop = FALSE])
# [[1]]
# Name1
#[1,] 1
#[[2]]
# Name1
#[1,] 1
矩阵不同于数据框。对于矩阵,mat1[1]
返回矩阵的第一个值,而对于数据帧,mtcars[1]
返回第一列。要对矩阵中的列进行子集化,您始终需要一个前置逗号(mat[, i]
而不是 mat[i]
),但对于数据帧而言并非总是如此。
关于删除列表中矩阵中的 NA 列会删除矩阵的列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090719/