我的数据由零件编号组成,销售日期以年、月、季度、日表示。同一零件可以在同一天出售,但发票编号不同,因此每天都有重复的零件编号。数据如下所示:
Year <- c(2016, 2016, 2016, 2017, 2017, 2018, 2018)
Month <- c("Aug", "Sep", "Sep", "Aug", "Sep", "Aug", "Sep")
Day <- c(1, 2, 2, 1, 2, 1, 2)
Revenue <- c(147, 200, 250, 300, 200, 250, 150)
PartNumber <- c("1234", "5678", "5678", "1234", "5678", "5678", "9101")
testdf <- data.frame(Year, Month, Day, Revenue, PartNumber)
> testdf
Year Month Day Revenue PartNumber
1 2016 Aug 1 147 1234
2 2016 Sep 2 200 5678
3 2016 Sep 2 250 5678
4 2017 Aug 1 300 1234
5 2017 Sep 2 200 5678
6 2018 Aug 1 250 5678
7 2018 Sep 2 150 9101
我一直在做的是制作一个新的数据框并将一个添加到 Year 列,然后将 Revenue 列命名为 Revenue Last Year,如下所示:
testdfCopy <- testdf
testdfCopy$Year <- testdfCopy$Year + 1
colnames(testdfCopy)[4] <- "RevenueLY"
mergeddf <- merge(testdf, testdfCopy, by = c("Year", "Month", "Day", "PartNumber"), all = TRUE)
然后当我合并它们时,我将第一个数据帧收入和合并数据帧收入的总和,但它们当然会不同,所以我正在寻找一种方法来解决这个问题。我的实际数据由数百万行组成,因此希望我们能找到一种不需要手动或耗时的方法。
> sum(testdf$Revenue)
[1] 1497
> sum(mergeddf$Revenue, na.rm = TRUE)
[1] 1697
最后我得到了mergeddf:
> mergeddf
Year Month Day PartNumber Revenue RevenueLY
1 2016 Aug 1 1234 147 NA
2 2016 Sep 2 5678 200 NA
3 2016 Sep 2 5678 250 NA
4 2017 Aug 1 1234 300 147
5 2017 Sep 2 5678 200 200
6 2017 Sep 2 5678 200 250
7 2018 Aug 1 1234 NA 300
8 2018 Aug 1 5678 250 NA
9 2018 Sep 2 5678 NA 200
10 2018 Sep 2 9101 150 NA
11 2019 Aug 1 5678 NA 250
12 2019 Sep 2 9101 NA 150
但我想要:
> finaldf
Year Month Day Revenue PartNumber RevenueLY
1 2016 Aug 1 147 1234 NA
2 2016 Sep 2 200 5678 NA
3 2016 Sep 2 250 5678 NA
4 2017 Aug 1 300 1234 147
5 2017 Sep 2 200 5678 200
6 2018 Aug 1 250 5678 NA
7 2018 Sep 2 150 9101 NA