我有一个很大的列表列表,我想在其中删除每个列表中的重复元素。示例:
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]
但收到以下错误:
“ 错误:(列表)对象不能被强制键入“逻辑” ”
有人知道解决此问题的方法吗?
谢谢!
答案 0 :(得分:1)
我们可以将lapply
与unique
一起使用
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"