删除列表中矩阵中的 NA 列会删除矩阵的列名
Removing NA column in matrix in a list deletes column names of the matrix
我的代码如下所示:
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]
returns 你是矩阵的第一个值,而在数据帧的情况下 mtcars[1]
returns 你是第一列。要对矩阵中的列进行子集化,您始终需要在前面加上逗号(mat[, i]
而不是 mat[i]
),但对于数据帧而言并非总是如此。
我们可以在列名上使用 lapply
和 complete.cases
到 return 逻辑向量,并在 j
索引中使用它到 select 列矩阵
lapply(mylist, function(x) x[, complete.cases(colnames(x)), drop = FALSE])
#[[1]]
# Name1
#[1,] 1
#[[2]]
# Name1
#[1,] 1
我的代码如下所示:
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]
returns 你是矩阵的第一个值,而在数据帧的情况下 mtcars[1]
returns 你是第一列。要对矩阵中的列进行子集化,您始终需要在前面加上逗号(mat[, i]
而不是 mat[i]
),但对于数据帧而言并非总是如此。
我们可以在列名上使用 lapply
和 complete.cases
到 return 逻辑向量,并在 j
索引中使用它到 select 列矩阵
lapply(mylist, function(x) x[, complete.cases(colnames(x)), drop = FALSE])
#[[1]]
# Name1
#[1,] 1
#[[2]]
# Name1
#[1,] 1