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

R语言如何将数据框中计数列的数值展开为对应行数的观测?

解决方案

方法1:展开分组计数为单婴儿维度观测

你可以直接使用tidyverse生态中tidyr包的uncount()函数完成计数展开,该函数就是专门用于将计数列拆分为对应行数的重复观测:

# 加载tidyverse(如果没有安装先运行install.packages("tidyverse"))
library(tidyverse)
# 按照Birth列的数值展开行
df_expanded <- df %>% 
  uncount(weights = Birth)
# 验证行数,输出为12400
nrow(df_expanded)

如果你不想安装第三方包,也可以用基础R的rep()函数实现同等效果:

df_expanded_base <- df[rep(seq_len(nrow(df)), df$Birth), ]
# 不需要保留Birth列的话可以主动删除
df_expanded_base$Birth <- NULL

展开后每一行对应一名独立婴儿,你可以直接用该数据集构建分类模型。

方法2:无需展开的更高效方案(推荐)

你要实现的是二分类概率预测任务,完全不需要额外展开生成12400行数据浪费内存和运算资源,直接用聚合数据拟合加权逻辑回归即可,得到的模型结果和展开后拟合的结果完全一致:

# 拟合二分类逻辑回归模型,将Birth作为行权重传入
gender_model <- glm(
  Gender ~ Year + Area, 
  data = df, 
  family = binomial(link = "logit"),
  weights = Birth
)
# 预测新样本的男性概率,比如预测2020年CF地区的新生儿性别概率
predict(gender_model, newdata = data.frame(Year = "2020", Area = "CF"), type = "response")

这种方案适合样本量更大的聚合计数场景,运算效率远高于先展开再建模。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:57:02