r语言 - 标识 data.table 中列表中的相同列表(作为变量)



我将数据排列在一个data.table中,并创建了包含列表或有时包含列表的列表的列livar。每行表示唯一记录的多条记录。列livar聚合列表中唯一记录的变量(不再在data.table中(的所有观察结果,或者当一个记录有多个条目时,然后在列表列表中。

我现在想检查列livar中一行的所有列表是否相同。在提供的代码中,我希望same列中的第一行是FALSE,第二行和第三行是TRUE。如以下行所示,代码按我的预期工作,但不是在data.table上下文中。有人可以在这里帮忙吗?

a <- c(123456, NA, 456789, NA, NA)
b <- c(NA, NA)
c <- c(123456, NA, 987654, NA, NA)
d <- c(123456, NA, 987654, NA, NA)
e <- c(NA, NA)
li1 <- list(a, b)
li2 <- list(c, d)
DT <- data.table(c(1,2,3))
DT[, livar := list(li1, li2, e)]
DT[, same := length(unique(livar))==1] # FALSE
length(unique(li1))==1 # FALSE
length(unique(li2))==1 # TRUE
length(unique(e))==1 # TRUE
length(unique(c(NA, NA)))==1 # TRUE

正如chinsoon12指出的那样,为了进入列表的每个列表,下一行中缺少 *app。

DT[, same := sapply(livar, function(x) length(unique(x))==1L)]

最新更新