gpt4 book ai didi

r - 仅当使用 data.table 的 := 连接两个表时才需要第一个实例

转载 作者:行者123 更新时间:2023-12-02 22:11:45 25 4
gpt4 key购买 nike

我有一个policyData,它是我非常大的数据集(数百万行),我希望通过映射表(数万行)向其中添加一些信息。

示例:

policyData <- data.table(plan=c("c","b","b","d"),v=c(8,7,5,6),foo=c(4,2,8,3))
mapping <- data.table(plan=c("b","b","a","a","c","c"),a=c(1,2,4,5,7,8),b=c(9,8,6,5,3,2))

政策数据:

   plan v foo
1: c 8 4
2: b 7 2
3: b 5 8
4: d 6 3

映射:

   plan a b
1: b 1 9
2: b 2 8
3: a 4 6
4: a 5 5
5: c 7 3
6: c 8 2

问题是映射有多个实例,我希望只获得第一个匹配项。我需要使用 := 使用内存有效的方式将两者连接起来。

所需的输出是:

   plan v foo  a  b
1: c 8 4 7 3
2: b 7 2 1 9
3: b 5 8 1 9
4: d 6 3 NA NA

我已经尝试过:

policyData[mapping, on="plan", `:=`(a=i.a, b=i.b)] 

给出了映射表中的最后一个实例:

   plan v foo  a  b
1: c 8 4 8 2
2: b 7 2 2 8
3: b 5 8 2 8
4: d 6 3 NA NA

我也尝试过:

policyData[mapping, on="plan", `:=`(a=i.a, b=i.b), mult="first"]

这给出了奇怪的结果(第二个“b”与映射不匹配):

   plan v foo  a  b
1: c 8 4 8 2
2: b 7 2 2 8
3: b 5 8 NA NA
4: d 6 3 NA NA

任何见解都会有帮助。我已经进行了大量搜索。

最佳答案

简单总结一下mappingmapping[, .SD[1], by = plan]并使用它来加入:

policyData[mapping[, .SD[1], by = plan]
, on = .(plan)
, `:=` (a = i.a, b = i.b)]

给出所需的输出:

> policyData
plan v foo a b
1: c 8 4 7 3
2: b 7 2 1 9
3: b 5 8 1 9
4: d 6 3 NA NA

关于r - 仅当使用 data.table 的 := 连接两个表时才需要第一个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52474989/

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