【发布时间】:2015-09-14 15:37:06
【问题描述】:
我有这段代码,我在其中循环了 250,000 个项目。 以下是代码中的步骤: 1. 给定产品的子集数据 2. 将数据与月份数据框合并(左)。 3. 用该特定产品名称替换空产品名称 4. 将销售额的 NA 值替换为 0
这是两个产品的示例数据集。 数据:
data2 <- data.frame(product_no = c("A", "A", "A", "B","B","B"),
sales = c(200, 130, 221, 310,109, 98), month = c(1, 4, 5, 8,1, 12), stringsAsFactors=FALSE)
month_unique <- as.data.frame(seq(1,12, by=1))
colnames(month_unique)[colnames(month_unique)=="seq(1, 12, by = 1)"] <- "month"
代码:
unique_product <- unique(data2$product_no)
data3 <- data.frame()
process_time <- Sys.time()
for (i in 1:length(unique_product)){
step1 <- subset(data2, product_no==unique_product[i])
step2 <- merge(month_unique,step1, by="month", all.x = TRUE)
step2$product_no <- unique_product[i]
step2[is.na(step2)] <- 0
data3 <- rbind(data3, step2)
}
Sys.time() - process_time
预期结果:
data3
有更快的方法吗?
谢谢。
【问题讨论】:
-
首先,您将列名从
productId更改为product_no(在您的可复制版本中应该只是product_no吗?)其次,您要做的就是确保data2中没有出现的月份有 0 个值? (month_unique中是否有额外的数据? -
是的,对不起。我已经编辑到 product_no。现在应该跑过去了。在可重现的版本中,它应该只是 product_no。实际上是的,我要做的就是确保在 data2 中的值为零的月份有零值。 month_unique 中没有额外的数据。