温馨提示:本文翻译自stackoverflow.com,查看原文请点击:r - Identify same lists in list (as variable) in a data.table

r - 在数据表中标识列表中的相同列表(作为变量)

发布于 2020-03-28 23:20:10

我将数据排列在中,data.table并创建了livar包含列表或有时包含列表的列。每行代表一个唯一记录的多个记录。该列livar汇总data.table列表中唯一记录的变量(不再存在)的所有观察值,或者列表的列表中有一个记录的多个条目时。

我现在要检查列livar一行的所有列表是否都相同。在提供的代码中,我希望该列的第一行sameFALSE,第二和第三行是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

查看更多

查看更多

提问者
yaennu.s
被浏览
78
yaennu.s 2020-01-31 17:27

如前所述chinsoon12,为了进入列表的每个列表,以下行中缺少* apply。

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