【问题标题】:Finding combination of NAs in matrix (exclusive AND?)在矩阵中查找 NA 的组合(异或?)
【发布时间】:2023-02-01 01:49:46
【问题描述】:

我面临一个我无法完全弄清楚的问题,我希望有人能够帮助我解决这个问题。它可能超级简单,但我正在挣扎,我花了太多时间来解决这个问题,以至于我无法再清楚地思考了。

我有一个矩阵,假设有 20 行和 5 列。有时我在第 1 列中有 NA。其他时候在第 1 列和第 2 列,或只有 2 列,或 2 列和 4 列等。

我想获取仅缺少第 1 列中的值的观察结果的行名称。然后我想寻找组合,例如只缺少第 1 列和第 2 列的组合。

这是一些示例代码:

set.seed(39)

df <- matrix(rnorm(100),nrow=20, ncol = 5)
df <- apply (df, 2, function(x) {x[sample(c(1:20), floor(20/8))] <- NA; x} )

auxmatrix <- is.na(df)

到目前为止,我的方法是这样的:

which(ifelse(auxmatrix[,1] == T, 1, 0) == 1)

这旨在寻找仅缺少第 1 列中的值的观察结果。 但是,这显然也给了我那些缺少第 1 列和(示例)第 2 列的观察结果。

我如何表述它忽略那些缺少 1 和 2 的行的语句?

之后我还想寻找组合,例如:

which(ifelse(auxmatrix[,3] == T &amp; auxmatrix[,4] == T, 1, 0) == 1)

找到第 3 列和第 4 列中有 NA 的观察结果。当然,他的 then 也给了我错误的观察结果,因为可能存在 3,4 和 5 缺失的观察结果。

我希望我能正确表达我的问题。我非常感谢你的想法。

最好的祝福, 托尼13

【问题讨论】:

  • 那么,以您的示例为例,您的预期输出是什么?

标签: r matrix na logical-operators


【解决方案1】:

我认为仅使用 which 更简单:

对于第 1 列中的行号: which(is.na(df[,1])

对于列的组合: which(is.na(df[,2]) &amp; is.na(df[,3])) 这将返回行号,例如第 2 列和第 3 列中的 NA。

【讨论】:

    【解决方案2】:

    使用rowSums。让我们使用一个更简单的数据框。

    df
    #   V1 V2 V3 V4 V5
    # 1  1  1  1  1  1
    # 2  1  1  1 NA  1
    # 3 NA  1  1  1  1
    # 4  1 NA  1  1  1
    # 5 NA  1  1  1  1
    # 6 NA NA  1  1  1
    # 7 NA NA  1 NA  1
    # 8 NA NA  1  1  1
    # 9 NA NA NA NA NA
    
    ## NA only in 1st row
    which(is.na(df[, 1]) & rowSums(is.na(df[, -1])) == 0)
    # [1] 3 5
    
    ## NA only in 1st ans 2nd row
    which(rowSums(is.na(df[, 1:2])) == 2 & rowSums(is.na(df[, -(1:2)])) == 0)
    # [1] 6 8
    

    数据:

    df <- structure(list(V1 = c(1L, 1L, NA, 1L, NA, NA, NA, NA, NA), V2 = c(1L, 
    1L, 1L, NA, 1L, NA, NA, NA, NA), V3 = c(1L, 1L, 1L, 1L, 1L, 1L, 
    1L, 1L, NA), V4 = c(1L, NA, 1L, 1L, 1L, 1L, NA, 1L, NA), V5 = c(1L, 
    1L, 1L, 1L, 1L, 1L, 1L, 1L, NA)), class = "data.frame", row.names = c(NA, 
    -9L))
    

    【讨论】:

      猜你喜欢
      • 2014-01-14
      • 2019-12-05
      • 1970-01-01
      • 2016-03-11
      • 2014-06-25
      • 2014-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多