如何在R中按国家分组计算各年度论文发表量增长率
按国家分组计算年度论文发表量增长率实现方法
最常用的实现方式是基于Python的pandas库完成,操作核心逻辑如下:
- 第一步:预处理数据,确保每个国家的记录按年份升序排列,避免错位取数
- 第二步:按
country字段分组,取每条记录对应上一年度的论文发表量 - 第三步:代入给定公式计算增长率,每个国家的首年记录因无上一年数据,增长率为空值,符合业务逻辑
完整可运行代码
import pandas as pd # 加载/构造数据集 data = [ ["South Kora", 2002, 23456], ["South Kora", 2003, 24456], ["South Kora", 2004, 24256], ["South Kora", 2005, 29456], ["South Kora", 2006, 23488], ["Pakistan", 2002, 4333], ["Pakistan", 2003, 4125], ["Pakistan", 2004, 3567], ["Pakistan", 2005, 5432], ["Pakistan", 2006, 2345], ["Armenia", 2002, 567], ["Armenia", 2003, 678], ["Armenia", 2004, 765], ["Armenia", 2005, 987], ["Armenia", 2006, 713] ] df = pd.DataFrame(data, columns=["country", "year", "publication"]) # 先按国家、年份排序,保证顺序正确 df = df.sort_values(by=["country", "year"], ascending=[True, True]) # 分组取同国家上一年的发表量 df["last_year_pub"] = df.groupby("country")["publication"].shift(1) # 按公式计算增长率,结果保留2位小数 df["growth_rate(%)"] = ((df["publication"] - df["last_year_pub"]) / df["last_year_pub"] * 100).round(2) # 可选:删除临时辅助列 df = df.drop(columns=["last_year_pub"]) # 打印结果 print(df)
计算结果示例
运行代码后得到的数据集如下,和手动计算结果一致:
country year publication growth_rate(%) 0 Armenia 2002 567 NaN 1 Armenia 2003 678 19.58 2 Armenia 2004 765 12.83 3 Armenia 2005 987 29.02 4 Armenia 2006 713 -27.76 5 Pakistan 2002 4333 NaN 6 Pakistan 2003 4125 -4.80 7 Pakistan 2004 3567 -13.53 8 Pakistan 2005 5432 52.28 9 Pakistan 2006 2345 -56.83 10 South Kora 2002 23456 NaN 11 South Kora 2003 24456 4.26 12 South Kora 2004 24256 -0.82 13 South Kora 2005 29456 21.44 14 South Kora 2006 23488 -20.26
如果需要用SQL实现,核心逻辑完全一致:用窗口函数
LAG(publication) OVER (PARTITION BY country ORDER BY year)取上一年发表量,再代入增长率公式计算即可。
内容的提问来源于stack exchange,提问作者Santiago99
相关产品推荐
相关产品推荐

