使用手头的信息,我需要预测下个月我们需要多少特定产品。我有几个月的数据回溯,但数据由VPN和单独的仓库号分开。我只需要知道一般订购多少并忽略仓库分离。我们稍后会补充这一点。
许多VPN都有多个副本,我想整合所有重复项,并对已分离的数字求和。
VPN Month To Date December November October September August July June May April March
0A36227-AA 15 6 4 2 NA 4 6 4 2 <NA> 4
0A36227-AA NA 1 NA NA NA NA 1 <NA> <NA> <NA> <NA>
0A36227-AA 2 3 1 NA 2 3 3 1 <NA> 2 3
0A36258-AA NA NA NA 1 NA NA <NA> <NA> 1 <NA> <NA>
0A36258-AA 1 NA 1 NA NA NA <NA> 1 <NA> <NA> <NA>
0A36258-AA NA NA NA 1 NA NA <NA> <NA> 1 <NA> <NA>
0A36258-AA 1 NA NA NA NA NA <NA> <NA> <NA> <NA> <NA>
所以我希望将所有重复项组合在一起,并将每行中的所有数字添加到每行一行中。
我已尝试使用聚合功能,但它对我没用。我可能用错了。
任何帮助将不胜感激!
在某些情况下,它可能会导致无限数量出现。如果有人对如何处理它有任何进一步的建议,那将是受欢迎的。
答案 0 :(得分:0)
您基本上想知道如何在数据框中进行分组时执行求和。 你会找到很多答案。 我有一个针对您案例的data.table解决方案:
plouf <- read.table(text = " VPN Month.To.Date December November October September August July June May April March
0A36227-AA 15 6 4 2 NA 4 6 4 2 <NA> 4
0A36227-AA NA 1 NA NA NA NA 1 <NA> <NA> <NA> <NA>
0A36227-AA 2 3 1 NA 2 3 3 1 <NA> 2 3
0A36258-AA NA NA NA 1 NA NA <NA> <NA> 1 <NA> <NA>
0A36258-AA 1 NA 1 NA NA NA <NA> 1 <NA> <NA> <NA>
0A36258-AA NA NA NA 1 NA NA <NA> <NA> 1 <NA> <NA>
0A36258-AA 1 NA NA NA NA NA <NA> <NA> <NA> <NA> <NA>",
stringsAsFactors = FALSE, header = TRUE)
这是代码
DT <- setDT(plouf)
tochange <- names(DT)[!names(DT) %in% "VPN"]
此处tochange矢量是您想要平均的列的列表
DT[,c(tochange) := lapply(.SD,function(x){as.numeric(x)}),.SDcols = tochange]
DT[,lapply(.SD,function(x){sum(x,na.rm = TRUE)}),.SDcols = tochange,by = VPN]
第一行是将所有内容设置为数字
第二行执行忽略NA的总和并按VPN分组。我并非100%确定这是你想要的。
VPN Month.To.Date December November October September August July June May April March i
1: 0A36227-AA 17 10 5 2 2 7 10 5 2 2 7 10
2: 0A36258-AA 2 0 1 2 0 0 0 1 2 0 0 0
我希望它有所帮助
这里是dplyr等价物
plouf %>%
mutate_at(vars(tochange),funs(as.numeric)) %>%
group_by(VPN) %>%
summarise_at(vars(tochange),funs(sum(.,na.rm = TRUE)))