如何使用dplyr R在多个列上应用汇总

问题描述

我对2019年至2050年的不同地区和充电器类型有一些电动汽车充电容量预测。我想对整个区域中的值求和并按充电器类型分组,如下所示:

df %>%
  group_by(ChargerType) %>%
  summarise(sum2019 = sum(df$`2019`))

但是我想在2019年到2050年的所有时间里都这样做。这可以单独完成,但非常繁琐,我敢肯定有一种很好的方法可以一次完成所有工作!

供您尝试的示例数据如下所示:

Area <- c(1,1,2,3,3)
ChargerType <- c("Domestic","Public","Fast","Domestic","Fast")
`2019` <- c(0.1,0.3,0.5,0.1,0.2,0.1)
`2020` <- c(0.2,0.4,0.6,0.2)
`2021` <-c(0.4,0.8,0.3)

df <- data.table(Area,ChargerType,`2019`,`2020`,`2021`)

这个小例子可以为您提供帮助,显然直到2021年,但您随时可以创建更多数据!

希望您能提供帮助,确保在那里的某个人会很容易!

解决方法

您可以获取长格式的数据,并为每个sum和列名ChargerType获取值。

library(dplyr)

df %>%
  tidyr::pivot_longer(cols = -c(Area,ChargerType)) %>%
  group_by(ChargerType,name) %>%
  summarise(sum = sum(value))

如果您有data.table,则可以执行以下操作:

library(data.table)
dt <- melt(df,id.vars = c("Area","ChargerType"))
dt[,.(value = sum(value)),.(ChargerType,variable)]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...