【问题标题】:Removing NA column in matrix in a list deletes column names of the matrix删除列表中矩阵中的 NA 列会删除矩阵的列名
【发布时间】:2020-01-25 04:37:55
【问题描述】:

我有如下代码:

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 列但保留列表中矩阵剩余列的列名?

【问题讨论】:

    标签: r list matrix na names


    【解决方案1】:

    使用:

    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]),但对于数据帧并不总是如此。

    【讨论】:

      【解决方案2】:

      我们可以在列名上使用lapplycomplete.cases 来返回一个逻辑向量,并在j 索引中使用它来选择矩阵的列

      lapply(mylist, function(x) x[, complete.cases(colnames(x)), drop = FALSE])
       #[[1]]
       #     Name1
       #[1,]     1
      
       #[[2]]
       #    Name1
       #[1,]     1
      

      【讨论】:

        猜你喜欢
        • 2020-01-07
        • 1970-01-01
        • 2013-07-22
        • 1970-01-01
        • 1970-01-01
        • 2012-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多