通过分组获得一列和另一列的平均值

时间:2019-06-19 14:54:56

标签: r dataframe aggregate

我有一个看起来像这样的数据框:

    Year Iteration Production Technology
    2015     1     200        Gas
    2015     1     305        Gas
    2016     1     150        Gas
    2016     1     200        Gas
    2015     2     200        Gas 

“技术”列说明发电厂的类型。因此,对于“每年”和“每次迭代”,“技术”列中都会有多个工厂。

我想对数据进行汇总,以使该年份具有一个值,所有迭代的平均值以及该特定技术的所有发电厂的总和。

在此示例中为:

    Year Iteration Production Technology 
    2015 1.5       705        Gas
    2016 1.5       350        Gas

我尝试了各种使用汇总功能的方法,但是由于它也会汇总“技术”列(将总产量除以电厂数量)而失败。

2 个答案:

答案 0 :(得分:3)

一个选项是tidyverse可以按“年份”,“技术”分组,获得“ {迭代”的mean和“生产”的sum

library(tidyverse)
df1 %>% 
     group_by(Year, Technology) %>%
     summarise(Iteration = mean(Iteration),
               Production = sum(Production))
# A tibble: 2 x 4
# Groups:   Year [2]
#   Year Technology Iteration Production
#  <int> <chr>          <dbl>      <int>
#1  2015 Gas             1.33        705
#2  2016 Gas             1           350

数据

df1 <- structure(list(Year = c(2015L, 2015L, 2016L, 2016L, 2015L), Iteration = c(1L, 
1L, 1L, 1L, 2L), Production = c(200L, 305L, 150L, 200L, 200L), 
    Technology = c("Gas", "Gas", "Gas", "Gas", "Gas")), 
    class = "data.frame", row.names = c(NA, 
-5L))

答案 1 :(得分:3)

library(data.table) dt1[ , list(Iteration=mean(Iteration), Production=sum(Production)), by=list(Year,Technology)] #> Year Technology Iteration Production #> 1: 2015 Gas 1.333333 705 #> 2: 2016 Gas 1.000000 350 中的另一种方法:

sqldf

作为我最近对的痴迷,这是使用library(sqldf) sqldf("select Year, Technology, avg(Iteration) as AVG_Iteration, sum(Production) as TOT_Production from dt1 group by Year, Technology", drv="SQLite") #> Year Technology AVG_Iteration TOT_Production #> 1 2015 Gas 1.333333 705 #> 2 2016 Gas 1.000000 350 软件包的解决方案:

dt1 <- fread(input = "  Year Iteration Production Technology
                        2015     1     200        Gas
                        2015     1     305        Gas
                        2016     1     150        Gas
                        2016     1     200        Gas
                        2015     2     200        Gas ")

reprex package(v0.3.0)于2019-06-19创建

数据:

{{1}}