【问题标题】:Determine missing observations (not NAs) in dataset in R在 R 中的数据集中确定缺失的观测值(不是 NA)
【发布时间】:2016-07-04 02:15:14
【问题描述】:

我有一个相当大的数据集,总共有近 6000 个观察值。向我提供了另一个缺少观察结果的数据集。如果没有发生测量,则不用用 NA 填充行/观察,而是省略整个行/观察。第二个数据集有 5500 行。

我需要确定哪些观察没有记录,或者换句话说,第二个数据集中缺少哪些行。我指的不是 NA 或缺失值,而是未将其纳入数据集的观察结果。

在下面的示例中,每个观察 (ID) 还应具有“组”记录 11、12、13、14、21、22、23、24。但是,ID 206902 只有组 11、12、14, 21, 22, 23, 24. 不见了 13

在此示例中,ID 并不是真正唯一的,因此应该有 8 个 ID。 例如,ID 206901 & 组 11; ID 206901 & 第 12 组等

如何轻松确定缺少哪些观测值 (ID)?同样,每个 ID 应该有 8 条记录。

example <- structure(list(ID = c(206901L, 206901L, 206901L, 206901L, 206901L, 
206901L, 206901L, 206901L, 206902L, 206902L, 206902L, 206902L, 
206902L, 206902L, 206902L), group = c(11L, 12L, 13L, 14L, 21L, 
22L, 23L, 24L, 11L, 12L, 14L, 21L, 22L, 23L, 24L)), .Names = c("ID", 
"group"), sorted = "ID", class = c("tbl_dt", "tbl", "data.table", 
"data.frame"), row.names = c(NA, -15L), .internal.selfref = <pointer: 0x0000000000100788>)

【问题讨论】:

    标签: r select filter data.table


    【解决方案1】:

    目前还不清楚预期的输出是什么,但如果我们需要在所有唯一“组”中列出特定 ID 中所有缺失的“组”,那么我们可以使用 %in%!获取按“ID”分组的缺失的“组”的逻辑索引,并使用逻辑索引“i1”返回缺失的“组”ifany缺失组或else返回'NA '。

    Un <- unique(example[["group"]])
    example[, {i1 <- !Un %in% group
               list(NotFound = if(any(i1)) Un[i1] else NA_integer_) 
              }, ID]
    #       ID NotFound
    #1: 206901       NA
    #2: 206902       13
    

    或者正如@Frank 所提到的,我们可以交叉连接(CJ)'ID' 和'group' 列中的unique 元素,并将join 输出与'example' on 'ID ', 'group' 列,将 'i' 指定为 'example' 的否定 (!) 以仅输出在 'example' 中找不到的元素

    example[, CJ(ID=ID, group=group, unique=TRUE)
                         ][!example, on = c("ID", "group")]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 2014-08-17
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多