【问题标题】:Remove rows with NAs for matrices in a list删除列表中矩阵的 NA 行
【发布时间】:2020-01-07 21:56:43
【问题描述】:

我知道这个问题可能是重复的。

我有一个矩阵列表,对于每个矩阵,我想确定第一列中是否存在 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]))

我希望将输出存储在等效列表中(例如 list2)。例如 list2[[1]] 将是一个 1x2 矩阵。 list2[[2]] 将是一个 1x5 矩阵。并且列表 2[[3]] 将是一个 1x2 矩阵(仅在第 1 列中保留没有 NA 的行)

【问题讨论】:

    标签: r list matrix na


    【解决方案1】:

    如果只针对第一列,我们循环使用listlapply,然后使用an。匿名函数调用,获取第一列(x[,1]),用(is.na)检查NA,取反(!),即对于non_NA elemengts和基于数据集的行的子集。关于那个

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

    对于list中的整个数据集,我们可以在整个数据集上使用is.na创建的逻辑矩阵上使用rowSums

    lapply(list, function(x) x[rowSums(is.na(x)) == 0,, drop = FALSE])
    

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      相关资源
      最近更新 更多