我的数据文件包含每月费用。这些费用属于某些费用类别。我正在尝试过滤该列中的某些成本(一个成本存储桶有多个条目),并针对该成本存储桶按月汇总这些成本。然后,我必须将这些成本汇总到另一个成本桶中。
例如SWB,Training等的多个条目。需要每月汇总这些多个值,然后将它们累加到另一个成本段中(例如,人员)。
以下是代码:
list <- c("SWB", "Travel", "Training", "Relocation", "Contract Labor")
> for(i in seq_along(list))
+ {
+ temp <- dump %>% select(Line.Item.L1, Jan:Aug) %>% filter(Line.Item.L1 == a[[i]])
+ temp %>% select(Jan:Aug) %>% colSums(na.rm=TRUE) -> a[[i]]
+ }
它给出了一个错误:
列表[[i]]中的错误<-temp%>%select(Jan:Aug)%>%colSums(na.rm = TRUE):
提供的元素多于要替换的元素
然后,我用:
d <- data.frame(a=rep(1,10), b=rep(1,10), c=rep(1,10), d=rep(1,10), e=rep(1,10))
> for(i in seq_along(list))
+ {
+ j=1
+ d[j,] = c(a,b,c,d,e)
+ temp <- dump %>% select(Line.Item.L1, Jan:Dec) %>% filter(Line.Item.L1 == list[[i]])
+ temp %>% select(Jan:Dec) %>% colSums(na.rm=TRUE) -> d[j,]
+ j=j+1
+ }
这表明a:e未定义。
请帮助我编写这段代码
答案 0 :(得分:0)
为什么不使用tidyr中的collect()将月份列收集到一个称为月份的列中,然后按它们分组以计算总和?
您的新存储桶示例有点模糊,但是您可以执行以下操作:
list %>%
mutate(new_bucket = ifelse(Line.Item.L1 == bucket_value,'bucket1','bucket2') %>%
gather(key = month, value = cost, Jan:Aug) %>%
group_by(new_bucket,month) %>%
summarize(total_costs = sum(cost)
无论如何,我会先在单独的列中分配新存储桶(如果需要,请在for循环中进行分配),然后非常快速地计算剩余的存储空间。