Используя пакет data.table в R, я пытаюсь создать декартово произведение двух data.tables, используя метод слияния, как в базе R.
В базе выполняются следующие работы:
#assume this order data
orders<-data.frame(date=as.POSIXct(c('2012-08-28','2012-08-29','2012-09-01')),
first.name=as.character(c('John','George','Henry')),
last.name=as.character(c('Doe','Smith','Smith')),
qty=c(10,50,6))
#and these dates
dates<-data.frame(date=seq(from=as.POSIXct('2012-08-28'),
to=as.POSIXct('2012-09-07'),by='day'))
#get the unique customers
cust<-unique(orders[,c('first.name','last.name')])
#using merge from base R, get the cartesian product
merge(dates,cust,by=integer(0))
Однако тот же метод не работает с использованием data.table, и эта ошибка возникает:
"Ошибка в файле merge.data.table(date.dt, cust.dt, by = integer (0)): Требуется непустой вектор имен столбцов для by
.
#data.table approach
library(data.table)
orders.dt<-data.table(orders)
dates.dt<-data.table(dates)
cust.dt<-unique(orders.dt[,list(first.name,last.name)])
#try to use merge (data.table) in the same manner as base
merge(dates.dt,cust.dt,by=integer(0))
# Error in merge.data.table(dates.dt, cust.dt, by = integer(0)) :
# A non-empty vector of column names for `by` is required.
Я хочу, чтобы результат отражал все имена клиентов для всех дат, как и в базе, но делайте это с помощью метода data.table-centric. Возможно ли это?