You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用函数从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行数据框:

Countryave_populationmedian_lifeave_hospital_bedsmean_GDP
Afghanistan12.568.555
Brazil13.569.5107
Germany14.570.51510
Italy15.573.0138

补充说明

  • 基础R版本完全沿用原函数的计算逻辑,通过循环实现批量处理,不需要额外安装包。
  • tidyverse版本利用分组函数直接完成统计,代码更简洁,处理大规模数据时效率更高。
  • 两种实现都保留了原需求的4项统计指标,同时新增Country列明确对应每个国家的结果。

内容的提问来源于stack exchange,提问作者Richard

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 22:14:59