gpt4 book ai didi

sql - 如何在 R 中对 data.table 进行基本的左外连接?

转载 作者:行者123 更新时间:2023-12-01 08:17:32 24 4
gpt4 key购买 nike

我有一个 a 和 b 的数据表,我已将其分区为 below b < .5 和 above b > .5:

DT = data.table(a=as.integer(c(1,1,2,2,3,3)), b=c(0,0,0,1,1,1))
above = DT[DT$b > .5]
below = DT[DT$b < .5, list(a=a)]

我想在 above 之间做一个左外连接和 below : 每个 aabove , 计算 below 中的行数.这相当于 SQL 中的以下内容:
with dt as (select 1 as a, 0 as b union select 1, 0 union select 2, 0 union select 2, 1 union select 3, 1 union select 3, 1),
above as (select a, b from dt where b > .5),
below as (select a, b from dt where b < .5)
select above.a, count(below.a) from above left outer join below on (above.a = below.a) group by above.a;
a | count
---+-------
3 | 0
2 | 1
(2 rows)

我如何用 data.tables 完成同样的事情?这是我到目前为止尝试过的:
> key(below) = 'a'
> below[above, list(count=length(b))]
a count
[1,] 2 1
[2,] 3 1
[3,] 3 1
> below[above, list(count=length(b)), by=a]
Error in eval(expr, envir, enclos) : object 'b' not found
> below[, list(count=length(a)), by=a][above]
a count b
[1,] 2 1 1
[2,] 3 NA 1
[3,] 3 NA 1

我也应该更具体,因为我已经尝试过 merge但这会破坏我系统上的内存(并且数据集仅占用我大约 20% 的内存)。

最佳答案

看看这是否给你一些有用的东西。您的示例太稀疏,无法让我知道您想要什么,但它似乎可能是 above$a 的值列表也在 below$a

table(above$a[above$a %in% below$a])

如果您还想要相反的 ... 值不在 below 中,然后这样做:
table(above$a[!above$a %in% below$a])

你可以连接它们:
> c(table(above$a[above$a %in% below$a]),table(above$a[!above$a %in% below$a]) )
2 3
1 2

一般 table%in%以相当小的足迹运行并且速度很快。

关于sql - 如何在 R 中对 data.table 进行基本的左外连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090621/

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