删除嵌套列表中的重复项

时间:2020-04-09 22:02:16

标签: r list

我有一个很大的列表列表,我想在其中删除每个列表中的重复元素。示例:

x <- list(c("A", "A", "B", "C"), c("O", "C", "A", "Z", "O"))

x 

[[1]]
[1] "A" "A" "B" "C"

[[2]]
[1] "O" "C" "A" "Z" "O"

我希望结果是一个看起来像这样的列表,其中删除了列表中的重复项,但保留了列表的结构。

[[1]]
[1] "A" "B" "C"

[[2]]
[1] "O" "C" "A" "Z"

我的主要策略是使用rapply(也尝试过lapply)来识别重复项并将其删除。我尝试过:

x[rapply(x, duplicated) == T]

但收到以下错误:

错误:(列表)对象不能被强制键入“逻辑”

有人知道解决此问题的方法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

我们可以将lapplyunique一起使用

lapply(x, unique)
#[[1]]
#[1] "A" "B" "C"

#[[2]]
#[1] "O" "C" "A" "Z"

rapply的问题在于,它递归地应用重复项,然后返回单个向量,而不是逻辑向量的list

rapply(x, duplicated)
#[1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE  TRUE

实际上可以是

lapply(x, function(u) u[!duplicated(u)])
#[[1]]
#[1] "A" "B" "C"

#[[2]]
#[1] "O" "C" "A" "Z"
相关问题