删除大列表中的重复项,同时保留 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))
我有一个非常大的列表(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))