加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

R data.table join:连接表中的SQL“select *”类似语法?

发布时间:2020-12-12 06:29:33 所属栏目:MsSql教程 来源:网络整理
导读:我有两个包含许多字段的data.tables. 我想加入这两个表,添加一些计算字段并附加第一个,第二个或两个表中的所有其他字段(类似于SQL的select ab AS sum,DT1.*,DT2.* FROM …)而不键入所有字段名称. 我该怎么做(关于最简单的语法和最佳性能)? 简化的示例数据:
我有两个包含许多字段的data.tables.

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

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

简化的示例数据:

library(data.table)
DT1 = data.table(x=c("c","a","b","b"),a=1:5)
DT2 = data.table(x=c("d","c",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功能,称为计算语言(或元编程),在官方 R Language Definition手册中有详细描述.这是R语言的一个特殊功能,不应该忘记IMO.
library(data.table)
DT1 = data.table(x=c("c",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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读