【发布时间】:2015-08-12 23:21:32
【问题描述】:
最终目标是将product_info 中每条记录的总量(transact_data$qty) 相加,其中transact_data$productId 存在于product_info 中,其中transact_data$date 介于product_info$beg_date 和product_info$end_date 之间。
数据框如下:
product_info <- data.frame(productId = c("A", "B", "A", "C","C","B"),
old_price = c(0.5,0.10,0.11,0.12,0.3,0.4),
new_price = c(0.7,0.11,0.12,0.11,0.2,0.3),
beg_date = c("2014-05-01", "2014-06-01", "2014-05-01", "2014-06-01","2014-05-01", "2014-06-01"),
end_date = c("2014-05-31", "2014-06-31", "2014-05-31", "2014-06-31","2014-05-31", "2014-06-31"), stringsAsFactors=FALSE)
transact_data <- data.frame(productId=c('A', 'B','A', 'C','A', 'B','C', 'B','A', 'C','A', 'B'),
date=c("2014-05-05", "2014-06-22", "2014-07-05", "2014-08-31","2014-05-03", "2014-02-22",
"2014-05-21", "2014-06-19", "2014-03-09", "2014-06-22","2014-04-03", "2014-07-08"),
qty =c(12,15,5,21,13,17,2,5,11,9,6,4), stringsAsFactors=FALSE)
我的第一步是按 productId 合并两个数据框:
sku_transact_merge <-merge(x=product_info, y=transact_data, by = c("productId"))
下一步是计算数量总和:
sku_transact_merge$total_qty <- ifelse(sku_transact_merge$date >= sku_transact_merge$beg_date &
sku_transact_merge$date <= sku_transact_merge$end_date,
aggregate(qty ~ productId+beg_date+end_date,
data= sku_transact_merge, sum), 0)
结果不是我想要的,我收到一个错误提示
(list) 对象不能被强制输入'double'
任何有关如何正确执行此逻辑的指针将不胜感激!
【问题讨论】:
-
您是否有意在
product_info中有重复的productId,beg_date,end_date记录(即A,2014-05-01,2014-05-31和B,2014-06-01,2014-06-31)?这将导致transact_data中的记录被merge()调用复制,从而在最终的sum()期间多次求和,我无法想象这是正确的。 -
是的,这是故意的。
-
您要聚合那些重复的
qty值吗?如果您想要的输出是productId,beg_date,end_date唯一的表,那么那些重复的qty值将全部汇总到相同的输出记录中,我仍然无法想象这是正确的。我不清楚你想要的输出。 -
或者您想要
product_info中的每条记录一个total_qty值吗? -
是的,我正在寻找每条记录的总数量。
标签: r merge data.table aggregate dplyr