计算平均值并将其作为新行添加到数据框

问题描述

我有2009年至2019年期间100多个国家/地区的长格式面板数据。

       df <- structure(list(area_name = c("Afghanistan","Afghanistan","Albania","Albania"),area_code = c("AFG","AFG","ALB","ALB"),area_group = c("Asia-Pacific","Asia-Pacific","Eastern Europe","Eastern Europe"),pillar_name = c("Governance","Governance","Investment Environment","Investment Environment"
),element_name = c("Executive Constraints","Government Effectiveness","Government Integrity","Political Accountability","Regulatory Quality","Rule of Law","Contract Enforcement","Investor Protection","Property Rights","Executive Constraints","Property Rights"),year = c("score_2009","score_2009","score_2009"
),score = c(5.94,5.6,5.82,3.85,4.62,5.68,4.21,4.51,8.75,8.51,9.87,7.79,11.5,7.18,6.37,9.2,11.3,13.2)),row.names = c(NA,-18L),class = "data.frame")

我的目标是为每个国家/地区添加另一行,以平均给定年份的不同分数。

最后,我希望它看起来像这样:

  area_name   area_code area_group     pillar_name            element_name             year       score
   <chr>       <chr>     <chr>          <chr>                  <chr>                    <chr>      <dbl>
 1 Afghanistan AFG       Asia-Pacific   Governance             Executive Constraints    score_2009  5.94
 2 Afghanistan AFG       Asia-Pacific   Governance             Government Effectiveness score_2009  5.60
 3 Afghanistan AFG       Asia-Pacific   Governance             Government Integrity     score_2009  5.82
 4 Afghanistan AFG       Asia-Pacific   Governance             Political Accountability score_2009  3.85
 5 Afghanistan AFG       Asia-Pacific   Governance             Regulatory Quality       score_2009  4.62
 6 Afghanistan AFG       Asia-Pacific   Governance             Rule of Law              score_2009  5.68
 7 Afghanistan AFG       Asia-Pacific   Investment Environment Contract Enforcement     score_2009  4.21
 8 Afghanistan AFG       Asia-Pacific   Investment Environment Investor Protection      score_2009  4.51
 9 Afghanistan AFG       Asia-Pacific   Investment Environment Property Rights          score_2009  8.75
10 Afghanistan AFG       Asia-Pacific   Avg                    Avg                      score_2009  5.44                                                                                                    
11 Albania     ALB       Eastern Europe Governance             Executive Constraints    score_2009  8.51
12 Albania     ALB       Eastern Europe Governance             Government Effectiveness score_2009  9.87
13 Albania     ALB       Eastern Europe Governance             Government Integrity     score_2009  7.79
14 Albania     ALB       Eastern Europe Governance             Political Accountability score_2009 11.5 
15 Albania     ALB       Eastern Europe Governance             Regulatory Quality       score_2009  7.18
16 Albania     ALB       Eastern Europe Governance             Rule of Law              score_2009  6.37
17 Albania     ALB       Eastern Europe Investment Environment Contract Enforcement     score_2009  9.20
18 Albania     ALB       Eastern Europe Investment Environment Investor Protection      score_2009 11.3 
19 Albania     ALB       Eastern Europe Investment Environment Property Rights          score_2009 13.2
20 Albania     ALB       Eastern Europe Avg                    Avg                      score_2009 9.44 

我对R相当陌生,不确定如何解决这个问题。任何帮助将不胜感激!

解决方法

您可以尝试以下方法:

library(tidyverse)
#Data
df <- structure(list(area_name = c("Afghanistan","Afghanistan","Albania","Albania"),area_code = c("AFG","AFG","ALB","ALB"),area_group = c("Asia-Pacific","Asia-Pacific","Eastern Europe","Eastern Europe"),pillar_name = c("Governance","Governance","Investment Environment","Investment Environment"
),element_name = c("Executive Constraints","Government Effectiveness","Government Integrity","Political Accountability","Regulatory Quality","Rule of Law","Contract Enforcement","Investor Protection","Property Rights","Executive Constraints","Property Rights"),year = c("score_2009","score_2009","score_2009"
),score = c(5.94,5.6,5.82,3.85,4.62,5.68,4.21,4.51,8.75,8.51,9.87,7.79,11.5,7.18,6.37,9.2,11.3,13.2)),row.names = c(NA,-18L),class = "data.frame")

代码:

df1 <- df %>% bind_rows(df %>% 
                   group_by(area_name,area_code,area_group,year) %>% 
                   summarise(pillar_name='Val.Avg',element_name='Val.Avg',score=mean(score))) %>%
  arrange(area_name,area_group)

输出:

     area_name area_code     area_group            pillar_name             element_name       year     score
1  Afghanistan       AFG   Asia-Pacific             Governance    Executive Constraints score_2009  5.940000
2  Afghanistan       AFG   Asia-Pacific             Governance Government Effectiveness score_2009  5.600000
3  Afghanistan       AFG   Asia-Pacific             Governance     Government Integrity score_2009  5.820000
4  Afghanistan       AFG   Asia-Pacific             Governance Political Accountability score_2009  3.850000
5  Afghanistan       AFG   Asia-Pacific             Governance       Regulatory Quality score_2009  4.620000
6  Afghanistan       AFG   Asia-Pacific             Governance              Rule of Law score_2009  5.680000
7  Afghanistan       AFG   Asia-Pacific Investment Environment     Contract Enforcement score_2009  4.210000
8  Afghanistan       AFG   Asia-Pacific Investment Environment      Investor Protection score_2009  4.510000
9  Afghanistan       AFG   Asia-Pacific Investment Environment          Property Rights score_2009  8.750000
10 Afghanistan       AFG   Asia-Pacific                Val.Avg                  Val.Avg score_2009  5.442222
11     Albania       ALB Eastern Europe             Governance    Executive Constraints score_2009  8.510000
12     Albania       ALB Eastern Europe             Governance Government Effectiveness score_2009  9.870000
13     Albania       ALB Eastern Europe             Governance     Government Integrity score_2009  7.790000
14     Albania       ALB Eastern Europe             Governance Political Accountability score_2009 11.500000
15     Albania       ALB Eastern Europe             Governance       Regulatory Quality score_2009  7.180000
16     Albania       ALB Eastern Europe             Governance              Rule of Law score_2009  6.370000
17     Albania       ALB Eastern Europe Investment Environment     Contract Enforcement score_2009  9.200000
18     Albania       ALB Eastern Europe Investment Environment      Investor Protection score_2009 11.300000
19     Albania       ALB Eastern Europe Investment Environment          Property Rights score_2009 13.200000
20     Albania       ALB Eastern Europe                Val.Avg                  Val.Avg score_2009  9.435556

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...