【问题标题】:How to apply a summarise across multiple columns using dplyr R [duplicate]如何使用 dplyr R 在多列中应用汇总 [重复]
【发布时间】:2020-12-04 05:21:34
【问题描述】:

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

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

但我想从 2019 年到 2050 年的所有年份都这样做。这可以单独完成,但会非常乏味,我相信有一个很好的方法可以一次性完成!

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

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

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

这是一个可以帮助你的小例子,显然只到 2021 年,但请随意创建更多数据!

希望你能帮上忙,对外面的人来说肯定很容易!

【问题讨论】:

  • 步骤:融化成长格式,然后按年份分组,然后总结

标签: r group-by dplyr sum summarize


【解决方案1】:

您可以获得长格式的数据和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)]

【讨论】:

  • “错误:无法对不存在的列进行子集化。”运行 pivot_longer 时?
  • @EllisR8 确保您使用的是实际数据中存在的正确数据框名称和列名称。您共享的数据返回错误Error: unexpected input in "2019_"。它对你有用吗?
  • 我已经让它和你的代码一起运行了。但这给了我每个区域和充电器类型的所有年份的总容量。我想要每种充电器类型和年份的所有区域的总容量。我想为年份(2019 年到 2050 年)创建一个列,一个充电器类型列和总容量总和(值)。
  • 我已经编辑了问题中的代码以匹配实际数据,不知道如何命名年份列。
  • df %>% tidyr:: pivot_longer(cols = -c(Area, ChargerType)) %>% group_by(ChargerType, name) %>% summarise(sum = sum(value)) 这行得通对我来说,pivot_longer 为年份创建了一个名为“名称”的列
猜你喜欢
  • 2016-06-03
  • 2014-12-02
  • 1970-01-01
  • 2017-05-31
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-03
  • 2019-01-27
相关资源
最近更新 更多