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日更新: 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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |