我有两个包含许多字段的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"]
解决方法
这应该准确地满足您的需求.
它使用非常强大的R功能,称为计算语言(或元编程),在官方 R Language Definition手册中有详细描述.这是R语言的一个特殊功能,不应该忘记IMO.
它使用非常强大的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