【发布时间】:2014-11-11 09:06:48
【问题描述】:
我有两个想要加入的data.tables(形成笛卡尔积)。其中一个data.tables 键控在Date 向量上,另一个键控在numeric 向量上:
# data.table with dates (as numeric)
dtDates2 = data.table(date =
as.numeric(seq(from = as.Date('2014/01/01'),
to = as.Date('2014/07/01'), by = 'weeks')),
data1 = rnorm(26))
# data.table with dates
dtDates1 = data.table(date =
seq(from = as.Date('2014/01/01'),
to = as.Date('2014/07/01'), by = 'weeks'),
data1 = rnorm(26))
# data.table with customer IDs
dtCustomers = data.table(customerID = seq(1, 100),
data2 = rnorm(100))
我setkey 并尝试使用CJ 交叉加入他们:
# cross join the two datatables
setkey(dtCustomers, customerID)
setkey(dtDates1, date)
setkey(dtDates2, date)
CJ(dtCustomers, dtDates1)
CJ(dtCustomers, dtDates2)
但得到以下错误:
Error in FUN(X[[1L]], ...) :
Invalid column: it has dimensions. Can't format it. If it's the result of data.table(table()), use as.data.table(table()) instead.
不知道我做错了什么。
【问题讨论】:
-
错误信息明确告诉你不能交叉连接data.tables,只能在向量(列)上做。
?CJ会告诉你同样的事情。你想达到什么目的?您只是想合并这些 data.tables 吗? -
@DavidArenburg 是的,我是。我怎样才能做到这一点?
-
基于哪些字段?我没有看到
dtCustomers和其他两个数据集之间有任何共同的列 -
@DavidArenburg 让我更新问题以更清楚地了解我想要什么。
标签: r join data.table