我想从列表中找到相同的元素。例如,如果列表元素是数据框:
List1 <- list(A=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)),
B=data.frame(id=c("PO","TD","WW"),num=c(8,1,4)),
C=data.frame(id=c("PO","TD","WW"),num=c(8,1,4)),
D=data.frame(id=c("SS","FW","MW"),num=c(2,5,1)),
E=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)),
G=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)))
Run Code Online (Sandbox Code Playgroud)
我想要有以下输出:
List2 <- list(c("A","E","G"),c("B","C"))
#i.e., A, E, G are identical. B and C are identical.
Run Code Online (Sandbox Code Playgroud)
是否有捷径可寻?谢谢!!!
你可以尝试下面的代码
> unname(split(names(List1), unlist(lapply(List1, toString))))
[[1]]
[1] "A" "E" "G"
[[2]]
[1] "B" "C"
[[3]]
[1] "D"
Run Code Online (Sandbox Code Playgroud)
比较整个 data.frames 的另一种选择是对它们进行哈希处理并比较哈希值
digests <- sapply(List1, digest::digest)
sets <- split(names(List1), digests)
unname(sets)
# [[1]]
# [1] "A" "E" "G"
# [[2]]
# [1] "D"
# [[3]]
# [1] "B" "C"
Run Code Online (Sandbox Code Playgroud)