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

如何高效为数据框按国家分组生成加权频数表?

解决方案

方法1:用dplyr分组批量生成(推荐,保留数据结构关联性)

借助dplyr的分组功能,无需拆分原数据框,就能为每个国家生成加权频数表:

library(descr)
library(dplyr)

# 你的原始数据
country <- c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2)
var <- c(1, 3, 2, 1, 2, 2, 3, 3, 1, 3, NA, NA)
wght <- c(0.8, 0.9, 1.2, 1.5, 0.5, 1, 0.7, 0.9, 0.8, 1.1, 1, 0.8)
df <- cbind.data.frame(country, var, wght)

# 按国家分组生成加权频数表,结果存储在嵌套列中
country_freqs <- df %>%
  group_by(country) %>%
  do(freq_table = freq(.$var, .$wght))

# 查看单个国家的结果
country_freqs$freq_table[[1]]  # 国家1的加权频数表
country_freqs$freq_table[[2]]  # 国家2的加权频数表

方法2:Base R原生实现(无需额外加载包)

用Base R的split+lapply组合,同样不修改原数据:

library(descr)

# 按国家拆分数据为列表(原数据保持完整)
country_groups <- split(df, df$country)

# 批量生成每个国家的加权频数表
freq_results <- lapply(country_groups, function(group) {
  freq(group$var, group$wght)
})

# 通过列表索引/名称查看结果
freq_results$`1`  # 查看国家1的结果
freq_results$`2`  # 查看国家2的结果

方法3:purrr函数式风格(简洁高效)

如果习惯Tidyverse的函数式写法,用purrr的map可以更精简:

library(descr)
library(purrr)

freq_results <- df %>%
  split(.$country) %>%
  map(~freq(.$var, .$wght))

# 查看结果方式同上
freq_results[[1]]

关键优势

  • 所有方法都不会修改原数据框,完全是非侵入式操作,原数据可直接用于后续的区域聚合、对比分析。
  • 批量处理30个国家时只需运行一段代码,无需手动重复subset操作,大幅提升效率。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 18:05:20