gpt4 book ai didi

R data.table 连接 : SQL "select *" alike syntax in joined tables?

转载 作者:行者123 更新时间:2023-12-04 05:47:09 25 4
gpt4 key购买 nike

我有两个包含许多字段的 data.tables。

我想连接这两个表,添加一些计算字段并附加第一个、第二个或两个表中的所有其他字段(类似于 SQL 的 select a+b AS sum, DT1.*, DT2.* FROM... ),而不键入所有字段名称。

我该怎么做(关于最简单的语法和最佳性能)?

简化示例数据:

library(data.table)
DT1 = data.table(x=c("c", "a", "b", "a", "b"), a=1:5)
DT2 = data.table(x=c("d", "c", "b"), b=6:8)

现在我想加入表格并添加一个计算字段:
DT1[DT2, .(sum=a + b, <<< how to say DT1.*, DT2.* here? >>> ), on="x"]

2016 年 5 月 4 日更新:
受用户 jangorecki 的启发,我发现了一个功能请求:

Should be able to refer to i's .SD during a join

最佳答案

这应该准确地满足您的需求。
它在官方 R Language Definition 中详细描述的语言(或元编程)上使用了非常强大的 R 功能,称为计算。手动的。这是 R 语言的一个特殊功能,不应被 IMO 遗忘。

library(data.table)
DT1 = data.table(x=c("c", "a", "b", "a", "b"), a=1:5)
DT2 = data.table(x=c("d", "c", "b"), b=6:8)

jj = as.call(c(
list(as.name(".")),
list(sum = quote(a+b)),
lapply(unique(c(names(DT1), names(DT2))), as.name)
))
print(jj)
#.(sum = a + b, x, a, b)
DT1[DT2, eval(jj), on="x"]
# sum x a b
#1: NA d NA 6
#2: 8 c 1 7
#3: 11 b 3 8
#4: 13 b 5 8

关于R data.table 连接 : SQL "select *" alike syntax in joined tables?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37007282/

25 4 0