gpt4 book ai didi

r - 寻求一种更好的方法从查找表中添加 data.table 中的列

转载 作者:行者123 更新时间:2023-12-02 03:58:27 25 4
gpt4 key购买 nike

我想通过与常用列 index1index2 的查找表合并来在 data.table 中创建一个新列 key >。然后根据这个新 key 列的值 (a,b,c),我想生成 3 个新列(abc),用于对 data.table 中的 value 列进行索引。

我的数据表如下所示:

    index1      index2    value
1 2 0 0.00
2 1 2 -5.00
3 3 2 -5.00
4 3 2 17.50
5 2 2 15.00
6 1 2 -7.50
7 3 2 3.75
8 1 2 -8.75
9 2 1 15.00
10 2 1 12.50

查找表是这样的:

 index1  index2  key
1 1 1 a
2 1 2 b
3 2 1 a
4 2 2 c
5 3 1 c
6 3 2 b

最终结果是这样的:

    index1     index2   value  key       a       b      c
1 2 0 0.00 NA NA NA NA
2 1 2 -5.00 b NA -5.00 NA
3 3 2 -5.00 b NA -5.00 NA
4 3 2 17.50 b NA 17.50 NA
5 2 2 15.00 c NA NA 15.00
6 1 2 -7.50 b NA -7.50 NA
7 3 2 3.75 b NA 3.75 NA
8 1 2 -8.75 b NA -8.75 NA
9 2 1 15.00 a 15.00 NA NA
10 2 1 12.50 a 12.50 NA NA

我尝试通过首先通过 merge() 合并 data.table 和查找表来解决这个问题,然后使用 J() 三次来实现上述结果。我对 data.table 还很陌生,但很想学习一种更优雅的方法来解决这个问题,而不是多次重复该过程。这是我的代码:

DT <- merge(DT, lookup, by=c('index1', 'index2'), all.x=TRUE)
DT <- data.table(DT) #Don't know why but DT became a data.frame after merge()
DT[J("a"), a:=value]
DT[J("b"), b:=value]
DT[J("c"), c:=value]

最佳答案

由于您想加入索引1和索引2,因此可以使用 merge正如您所拥有的,或者如果您将这些作为键分配给每个表,那么您可以简单地使用 []加入。 (如 DT[lookup] )

 setkey(lookup, index1, index2)
setkey(DT, index1, index2)

然后你可以迭代每个唯一的 key来自您的lookup表格如下

 keyVals <- unique(lookup[, key])

for (k in keyVals)
DT[lookup[key==k], c(k) := value]


<小时/>

结果:

DT
# index1 index2 value a b c
# 1: 1 2 -5.00 NA -5.00 NA
# 2: 1 2 -7.50 NA -7.50 NA
# 3: 1 2 -8.75 NA -8.75 NA
# 4: 2 0 0.00 NA NA NA
# 5: 2 1 15.00 15.0 NA NA
# 6: 2 1 12.50 12.5 NA NA
# 7: 2 2 15.00 NA NA 15
# 8: 3 2 -5.00 NA -5.00 NA
# 9: 3 2 17.50 NA 17.50 NA
# 10: 3 2 3.75 NA 3.75 NA

关于r - 寻求一种更好的方法从查找表中添加 data.table 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15005666/

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