gpt4 book ai didi

r - 使用 data.table 包的笛卡尔积

转载 作者:行者123 更新时间:2023-12-02 07:33:34 24 4
gpt4 key购买 nike

使用 R 中的 data.table 包,我尝试使用合并方法创建两个 data.table 的笛卡尔积,就像在基础 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 时相同的技术不起作用,并且会引发此错误:

"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 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.

我希望结果能够反射(reflect)所有日期的所有客户名称,就像在基数中一样,但以以 data.table 为中心的方式进行。这可能吗?

最佳答案

如果您首先根据 cust-dataframe 中的第一个和最后一个构造全名,则可以使用 CJ(交叉连接)。您不能使用所有三个向量,因为会有 99 个项目,而且名字会与姓氏不恰本地混合在一起。

> nrow(CJ(dates$date, cust$first.name, cust$last.name ) )
[1] 99

这将返回所需的 data.table 对象:

> CJ(dates$date,paste(cust$first.name, cust$last.name) )
V1 V2
1: 2012-08-28 George Smith
2: 2012-08-28 Henry Smith
3: 2012-08-28 John Doe
4: 2012-08-29 George Smith
5: 2012-08-29 Henry Smith
6: 2012-08-29 John Doe
7: 2012-08-30 George Smith
8: 2012-08-30 Henry Smith
9: 2012-08-30 John Doe
10: 2012-08-31 John Doe
11: 2012-08-31 George Smith
12: 2012-08-31 Henry Smith
13: 2012-09-01 John Doe
14: 2012-09-01 George Smith
15: 2012-09-01 Henry Smith
16: 2012-09-02 George Smith
17: 2012-09-02 Henry Smith
18: 2012-09-02 John Doe
19: 2012-09-03 Henry Smith
20: 2012-09-03 John Doe
21: 2012-09-03 George Smith
22: 2012-09-04 Henry Smith
23: 2012-09-04 John Doe
24: 2012-09-04 George Smith
25: 2012-09-05 George Smith
26: 2012-09-05 Henry Smith
27: 2012-09-05 John Doe
28: 2012-09-06 George Smith
29: 2012-09-06 Henry Smith
30: 2012-09-06 John Doe
31: 2012-09-07 George Smith
32: 2012-09-07 Henry Smith
33: 2012-09-07 John Doe
V1 V2

关于r - 使用 data.table 包的笛卡尔积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12321797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com