确定R中数据集中缺少的观测值(而不是NA)

时间:2016-03-17 15:49:13

标签: r select filter data.table

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

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

在我的下面的例子中,每个观察(ID)也应该有" group'记录为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>)

1 个答案:

答案 0 :(得分:5)

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

else

或者正如@Frank所提到的,我们可以交叉加入(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 )“ID”和“组”列中的CJ元素,并使用“示例”将输出unique join'ID','group'列,将'i'指定为'example'的否定(on),仅输出“示例”中未找到的元素

!