删除大列表中的重复项,同时保留 R 中的命名数字

Remove duplicate in a large list while keeping the named number in R

我有一个非常大的列表(1 582 238 个元素),我想删除所有重复项,同时保留数字的名称。

我的列表是这样的

$`GUE/NGL.mepid`
[1] 197701
...
$`Verts/ALE.mepid`
[1] 197837

可在此处获取:https://github.com/JMcrocs/MEPVote/blob/master/MEPList.rds

当我使用 unique(mylist) 时,我丢失了数字的名称。

 [[1]]
[1] 197701

[[2]]
[1] 197533

[[3]]
[1] 197521

很遗憾,列表太大,无法变成 data.frame,所以我还没有找到解决方案。

你能帮帮我吗?

此致,

试试这个:

df <- readRDS('MEPList.rds')
df1 <- as.data.frame(do.call(rbind,df))
df2 <- df1[!duplicated(df1$V1),,drop=F]

输出:

head(df2)

                    V1
GUE.NGL.mepid   197701
GUE.NGL.mepid.1 197533
GUE.NGL.mepid.2 197521
GUE.NGL.mepid.3 187917
GUE.NGL.mepid.4 124986
GUE.NGL.mepid.5 197529

然后您可以格式化 rownames() 以获取名称。

使用 !duplicated() 而不是 unique() 的子集来保留名称。

l <- list(197701, 197837, 197701)
names(l) <- c("GUE/NGL.mepid", "Verts/ALE.mepid", "GUE/NGL.mepid")


# > unique(l)
# [[1]]
# [1] 197701
# 
# [[2]]
# [1] 197837
# 
# > l[!duplicated(l)]
# $`GUE/NGL.mepid`
# [1] 197701
# 
# $`Verts/ALE.mepid`
# [1] 197837


或再次使用 unique() 检索唯一元素的名称。 (unique() 保持出现顺序)。

res <- unique(l)
names(res) <- unique(names(l))