gpt4 book ai didi

删除 data.table 中的所有重复项,添加带有标识符列表的列

转载 作者:行者123 更新时间:2023-12-04 10:36:34 24 4
gpt4 key购买 nike

基于 my previous question , 我有以下 data.table:

> dt = data.table(V1 = c(1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 4),
V2 = c(4, 4, 4, 5, 5, 6, 6, 7, 7, 4, 5),
ID = c(1, 2, 3, 1, 2, 2, 2, 1, 3, 1, 1))
V1 V2 ID
1: 1 4 1
2: 1 4 2
3: 1 4 3
4: 2 5 1
5: 2 5 2
6: 2 6 2
7: 2 6 2
8: 2 7 1
9: 2 7 3
10: 3 4 1
11: 4 5 1

有许多重复的行(当查看 V1V2 时)。

我想删除所有“完全重复”的行(对于给定的 V1V2 始终相同的行),包括具有唯一 的行>V1(因为所有一个 V2 都等于它自己)。

我在上面链接的前一个问题中得到了很多解决方案,包括@akrun 的(针对这个新表进行了修改):

> newDT = unique(dt[dt[, .(i1 = .I[uniqueN(V2) > 1]), V1]$i1], by = c("V1", "V2"))
V1 V2 ID
1: 2 5 1
2: 2 6 2
3: 2 7 3

但是,我实际上需要存储具有给定结果的 ID 列表。我可以用

简单地为给定的一对 (V1, V2) 收集 ID 的列表
> unique(dt[V1 == 2 & V2 == 5, ID])
[1] 1 2

(unique 是必要的,因为给定的 (V1,V2) 对也可能有重复的 ID,参见 dt rows 6:7) 并添加

newDT[, ID := .(.(unique(dt[V1 == 2 & V2 == 5, ID])))]

但我不知道如何“迭代”每个 (V1,V2) 对。

总而言之,我需要的输出是

> newDT
V1 V2 ID
1: 2 5 (1, 2)
2: 2 6 (2)
3: 2 7 (1, 3)

最佳答案

对数据行进行子集化后,按“V1”、“V2”分组,创建唯一“ID”的列表

dt[dt[, .(i1 = .I[uniqueN(V2) > 1]), V1]$i1][, .(ID = list(unique(ID))), .(V1, V2)]
# V1 V2 ID
#1: 2 5 1,2
#2: 2 6 2
#3: 2 7 1,3

关于删除 data.table 中的所有重复项,添加带有标识符列表的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56294891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com