如何用函数从R数据框一次性提取各国汇总统计子数据框
修改后的函数实现
方法1:基础R实现(无需额外依赖)
调整原函数逻辑,让它支持批量处理国家,默认会自动处理数据框里所有的唯一国家:
country_func <- function(x = unique(df$Country), df){ # 初始化空数据框存结果 final_result <- data.frame() # 逐个处理每个国家 for(country in x){ # 计算各项统计值 ave_pop <- mean(df$Population[df$Country == country], na.rm = TRUE) med_life <- median(df$Life[df$Country == country], na.rm = TRUE) ave_hosp <- mean(df$Hospitals[df$Country == country], na.rm = TRUE) mean_gdp <- mean(df$GDP[df$Country == country], na.rm = TRUE) # 把当前国家的结果追加到总数据框 final_result <- rbind(final_result, data.frame( Country = country, ave_population = ave_pop, median_life = med_life, ave_hospital_beds = ave_hosp, mean_GDP = mean_gdp )) } return(final_result) } # 调用函数,直接输出所有国家的统计结果 country_func(df = Example)
方法2:用tidyverse(dplyr)实现(更简洁高效)
如果习惯用tidyverse工具链,分组汇总的写法会更直观:
library(dplyr) country_func <- function(df){ df %>% group_by(Country) %>% summarise( ave_population = mean(Population, na.rm = TRUE), median_life = median(Life, na.rm = TRUE), ave_hospital_beds = mean(Hospitals, na.rm = TRUE), mean_GDP = mean(GDP, na.rm = TRUE), .groups = "drop" ) } # 调用函数 country_func(Example)
输出结果示例
两种方法都会生成如下结构的4行数据框:
| Country | ave_population | median_life | ave_hospital_beds | mean_GDP |
|---|---|---|---|---|
| Afghanistan | 12.5 | 68.5 | 5 | 5 |
| Brazil | 13.5 | 69.5 | 10 | 7 |
| Germany | 14.5 | 70.5 | 15 | 10 |
| Italy | 15.5 | 73.0 | 13 | 8 |
补充说明
- 基础R版本完全沿用原函数的计算逻辑,通过循环实现批量处理,不需要额外安装包。
- tidyverse版本利用分组函数直接完成统计,代码更简洁,处理大规模数据时效率更高。
- 两种实现都保留了原需求的4项统计指标,同时新增
Country列明确对应每个国家的结果。
内容的提问来源于stack exchange,提问作者Richard
相关产品推荐
相关产品推荐

