gpt4 book ai didi

r - 为 data.table (r) 中的每个 ID 选择第一个唯一匹配项

转载 作者:行者123 更新时间:2023-12-04 02:28:52 24 4
gpt4 key购买 nike

我有一个包含 3 列的 data.table。前 2 列是键 ID,第 3 列表示 ID 可以具有的所有可能值。

这是一个例子:

DT <- data.table( 
Pol_No = c('a','b','b','c','c','c','c','c','c','c')
, Veh_No = c(1,1,2,1,1,1,2,3,3,3)
, Value = c(1,1,2,3,4,5,6,3,4,5)
)
DT
Pol_No Veh_No Value
1: a 1 1
2: b 1 1
3: b 2 2
4: c 1 3
5: c 1 4
6: c 1 5
7: c 2 6
8: c 3 3
9: c 3 4
10: c 3 5

我需要过滤此表,以便每个保单和车辆的值都是唯一的。所以第 4 行会保留,但第 9 行会被过滤,因为 4 的值已经分配给 [Pol_No:c , Veh_No:1]

预期的结果是:

   Pol_No Veh_No Value
1: a 1 1
2: b 1 1
3: b 2 2
4: c 1 3
5: c 2 6
6: c 3 4

我已经尝试了很多可能性,但我能想到的最好的是:

Flt <- 
DT[DT
, .(Value)
, on = .(Pol_No , Veh_No )
, mult = 'first']
DT[ Value == Flt$Value,]

Pol_No Veh_No Value
1: a 1 1
2: b 1 1
3: b 2 2
4: c 1 3
5: c 2 6
6: c 3 3

这几乎是正确的,但是 [c,3] 的值已经在 [c,1] 中使用了,所以它仍然是错误的。

关于如何过滤掉已在同一键集中使用的行,有什么想法吗?

最佳答案

这样的事情怎么样?

DT[,Count := sequence(.N),by = .(Pol_No,Value)][,.SD[min(Count),],by = .(Pol_No,Veh_No)]
Pol_No Veh_No Value Count
1: a 1 1 1
2: b 1 1 1
3: b 2 2 1
4: c 1 3 1
5: c 2 6 1
6: c 3 4 2

稍后您可以删除 Count 列。

关于r - 为 data.table (r) 中的每个 ID 选择第一个唯一匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65555217/

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