gpt4 book ai didi

R 数据表 - 加入但过滤更新

转载 作者:行者123 更新时间:2023-12-04 12:13:14 26 4
gpt4 key购买 nike

我试图弄清楚如何加入 2 个数据表并更新第一个但应用了过滤器。

DT<-data.table(a=rep(1:3,3),b=seq(1:9))
DT
a b
1: 1 1
2: 2 2
3: 3 3
4: 1 4
5: 2 5
6: 3 6
7: 1 7
8: 2 8
9: 3 9

DT2 <- data.table(b=seq(1:9), c=rep(10,9))
> DT2
b c
1: 1 10
2: 2 10
3: 3 10
4: 4 10
5: 5 10
6: 6 10
7: 7 10
8: 8 10
9: 9 10

我可以像这样做一个基本的 equijoin
DT[DT2, on=c(b="b")]

但我想在逻辑上做的是这个
DT[a==3,DT2, on=c(b="b")]

但我收到以下错误
Error in `[.data.table`(DT, a == 3, DT2, on = c(b = "b")) : 
logical error. i is not a data.table, but 'on' argument is provided.

我可以颠倒连接的顺序并应用过滤器...
DT2[DT[a==3,], on=c(b="b")]

b a
1: 3 3
2: 6 3
3: 9 3

这给出了正确的行,但列顺序不正确。除此之外,我想用 c 更新 DT,但仅适用于我在 DT 中过滤并满足连接的行。

如果这是 SQL,我将使用带有子查询的更新,如下所示:
UPDATE
DT
set
c = (select c from DT2 where DT2.b = DT.B)
WHERE
DT.a=3

我似乎在用数据表语法绕圈子 - 任何人都可以指出我正确的方向吗?

干杯

大卫

最佳答案

无需创建虚拟变量的另一种选择是:

DT[a==3, c := DT2[DT[a==3], c, on = c(b="b")]]
DT
# a b c
#1: 1 1 NA
#2: 2 2 NA
#3: 3 3 10
#4: 1 4 NA
#5: 2 5 NA
#6: 3 6 10
#7: 1 7 NA
#8: 2 8 NA
#9: 3 9 10

关于R 数据表 - 加入但过滤更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46588340/

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