gpt4 book ai didi

r - 如何在 data.table 中选择同时匹配另一个 data.table 中的两个条件的行?

转载 作者:行者123 更新时间:2023-12-01 21:58:27 24 4
gpt4 key购买 nike

我有两个 data.tables DT1DT2DT1 可能比 DT2 大且列数更多.我想在 DT1 中选择行,其中 DT1 的两列与 DT2 中两列的同一行完全匹配。例如

DT1 = data.table(x=rep(c("b","a","c"),each=3), y=c(1,3,6), z=1:9)
DT2 = data.table(f=c("a","b"), g=c(1,3))

输出,DT1sub,我要找的是

   x y z
1: a 1 4
2: b 3 2

我的问题是,当我尝试对 DT1 进行子集化时,我也得到了那些只有一列匹配的行

> DT1[x%in%DT2$f & y%in%DT2$g]
# x y z
# 1: b 1 1
# 2: b 3 2
# 3: a 1 4
# 4: a 3 5

我可以得到我想要的输出,DT1sub,使用笨拙的 for 循环

DT1sub<-c()
for (i in 1:2)
DT1sub<-rbind(DT1sub,DT1[x==DT2$f[i] & y==DT2$g[i]])
DT1sub

但我想知道是否有更智能的 data.table 版本。这可能很简单,但我无法从 example("data.table") 中将它拼凑起来。

最佳答案

您在寻找:

library(data.table)

DT1sub <- DT1[DT2, on = .(x = f, y = g)]

输出:

   x y z
1: a 1 4
2: b 3 2

这基本上是一个过滤连接 - 它只保留 x 中与 f 中的任何内容匹配的那些行,以及 yg.

关于r - 如何在 data.table 中选择同时匹配另一个 data.table 中的两个条件的行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54843133/

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