Max*_*Lim 0 group-by aggregate r data-manipulation dataframe
我目前在操作/聚合我的数据框时遇到问题。我当前的数据框如下:
农场 | 年 | 奶牛 | 鸭子 | 鸡 | 羊 | 马 |
---|---|---|---|---|---|---|
农场 1 | 2020年 | 22 | 12 | 100 | 30 | 25 |
农场 1 | 2020年 | 0 | 12 | 120 | 20 | 20 |
农场 1 | 2019年 | 16 | 6 | 80 | 10 | 16 |
农场 1 | 2019年 | 12 | 0 | 50 | 0 | 11 |
农场 1 | 2018年 | 8 | 0 | 0 | 16 | 0 |
农场 1 | 2018年 | 0 | 0 | 10 | 13 | 12 |
农场2 | 2020年 | 31 | 28 | 27 | 10 | 14 |
农场2 | 2020年 | 0 | 13 | 31 | 20 | 0 |
农场2 | 2019年 | 3 | 31 | 0 | 20 | 43 |
农场2 | 2019年 | 20 | 50 | 43 | 17 号 | 42 |
农场2 | 2018年 | 39 | 33 | 0 | 48 | 10 |
农场2 | 2018年 | 34 | 20 | 28 | 12 | 12 |
农场3 | 2020年 | 27 | 0 | 37 | 30 | 42 |
农场3 | 2020年 | 50 | 9 | 0 | 0 | 0 |
农场3 | 2019年 | 0 | 19 | 0 | 20 | 16 |
农场3 | 2019年 | 0 | 2 | 0 | 0 | 7 |
农场3 | 2018年 | 0 | 0 | 5 | 27 | 0 |
农场3 | 2018年 | 0 | 7 | 43 | 49 | 42 |
为了简单起见,数据框的代码如下:
Farms = c(rep("Farm 1", 6), rep("Farm 2", 6), rep("Farm 3", 6))
Year = rep(c(2020,2020,2019,2019,2018,2018),3)
Cow = c(22,0,16,12,8,0,31,0,3,20,39,34,27,50,0,0,0,0)
Duck = c(12,12,6,0,0,0,28,13,31,50,33,20,0,9,19,2,0,7)
Chicken = c(100,120,80,50,0,10,27,31,0,43,0,28,37,0,0,0,5,43)
Sheep = c(30,20,10,0,16,13,10,20,20,17,48,12,30,0,20,0,27,49)
Horse = c(25,20,16,11,0,12,14,0,43,42,10,12,42,0,16,7,0,42)
Data = data.frame(Farms, Year, Cow, Duck, Chicken, Sheep, Horse)
Run Code Online (Sandbox Code Playgroud)
我可以检查是否有人知道如何使用 group_by 和/或aggregate 和/或pivot_wider 或任何其他方式将数据框更改为下表?下面的数据框按年份汇总了农场,并取了当年每只动物的平均值。
农场 | 年 | 奶牛 | 鸭子 | 鸡 | 羊 | 马 |
---|---|---|---|---|---|---|
农场 1 | 2020年 | 2020 年平均值 = (22+0)/2 = 11 | 12 | 110 | 25 | 22.5 |
农场 1 | 2019年 | 14 | 3 | 65 | 5 | 13.5 |
农场 1 | 2018年 | 4 | 0 | 5 | 14.5 | 6 |
农场2 | 2020年 | 15.5 | 20.5 | 29 | 15 | 7 |
农场2 | 2019年 | 11.5 | 40.5 | 21.5 | 18.5 | 42.5 |
农场2 | 2018年 | 36.5 | 26.5 | 14 | 30 | 11 |
农场3 | 2020年 | 38.5 | 4.5 | 18.5 | 15 | 21 |
农场3 | 2019年 | 0 | 10.5 | 0 | 10 | 11.5 |
农场3 | 2018年 | 0 | 3.5 | 24 | 38 | 21 |
预先感谢您,祝大家 2022 年快乐!
aggregate(.~Year + Farms, Data, mean)
Year Farms Cow Duck Chicken Sheep Horse
1 2018 Farm 1 4.0 0.0 5.0 14.5 6.0
2 2019 Farm 1 14.0 3.0 65.0 5.0 13.5
3 2020 Farm 1 11.0 12.0 110.0 25.0 22.5
4 2018 Farm 2 36.5 26.5 14.0 30.0 11.0
5 2019 Farm 2 11.5 40.5 21.5 18.5 42.5
6 2020 Farm 2 15.5 20.5 29.0 15.0 7.0
7 2018 Farm 3 0.0 3.5 24.0 38.0 21.0
8 2019 Farm 3 0.0 10.5 0.0 10.0 11.5
9 2020 Farm 3 38.5 4.5 18.5 15.0 21.0
aggregate(.~Farms + Year, Data, mean)
Farms Year Cow Duck Chicken Sheep Horse
1 Farm 1 2018 4.0 0.0 5.0 14.5 6.0
2 Farm 2 2018 36.5 26.5 14.0 30.0 11.0
3 Farm 3 2018 0.0 3.5 24.0 38.0 21.0
4 Farm 1 2019 14.0 3.0 65.0 5.0 13.5
5 Farm 2 2019 11.5 40.5 21.5 18.5 42.5
6 Farm 3 2019 0.0 10.5 0.0 10.0 11.5
7 Farm 1 2020 11.0 12.0 110.0 25.0 22.5
8 Farm 2 2020 15.5 20.5 29.0 15.0 7.0
9 Farm 3 2020 38.5 4.5 18.5 15.0 21.0
Data%>%
group_by(Farms, Year) %>%
summarise(across(everything(), mean), .groups = 'drop')
# A tibble: 9 x 7
Farms Year Cow Duck Chicken Sheep Horse
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Farm 1 2018 4 0 5 14.5 6
2 Farm 1 2019 14 3 65 5 13.5
3 Farm 1 2020 11 12 110 25 22.5
4 Farm 2 2018 36.5 26.5 14 30 11
5 Farm 2 2019 11.5 40.5 21.5 18.5 42.5
6 Farm 2 2020 15.5 20.5 29 15 7
7 Farm 3 2018 0 3.5 24 38 21
8 Farm 3 2019 0 10.5 0 10 11.5
9 Farm 3 2020 38.5 4.5 18.5 15 21
Run Code Online (Sandbox Code Playgroud)