r - R合并重复
问题描述
我的数据由零件编号组成,销售日期以年、月、季度、日表示。同一零件可以在同一天出售,但发票编号不同,因此每天都有重复的零件编号。数据如下所示:
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
解决方案
这是 dplyr 可能的选项(为连接表创建索引并使用 left_join):
library(dplyr)
testdf <- testdf%>%
mutate(ind=paste0(Year, Month, Day), NextYear= Year+1, ind_next=paste0(NextYear, Month, Day))
testdf%>%
left_join(testdf[,c(4,6)], by=c("ind_next"="ind"))
推荐阅读
- r - 滚动连接在data.table中生效时如何标记
- c# - 在不使用锁的情况下原子地更改两个数字
- python - ?: (urls.W005) URL 命名空间 'main' 不是唯一的。您可能无法反转此命名空间中的所有 URL
- react-native - 导入 expo-pixi 会导致 iOS 设备崩溃
- documentation - 向 Doxygen 添加自定义功能
- reactjs - 开玩笑 - 在 useEffect 挂钩中测试 clearTimeout
- python - 将指定的键值从字典加载到 json 对象中
- python - Python Google Cloud Function 记录严重性和重复项
- gitlab - 我可以限制用户访问我的 gitlab 存储库但提供读/写访问权限吗
- location - 将 FakeGPS 与 FusedLocationProviderClient 一起使用的方法