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

如何用R根据频数统计扩展数据集生成观测记录?

问题描述

现有一份基于Col1、Col2和y的频数统计数据,表格如下:

Col1Col2yn
GoodPoor00
GoodPoor10
GoodRich113
GoodRich08
BadPoor08
BadPoor10
BadRich115
BadRich05

需要将这份频数表扩展为原始观测记录:按照每组Col1、Col2、y的组合,生成对应n行的重复记录(n=0的组直接忽略)。


方法1:Python(Pandas)

利用Pandas的repeat()方法快速实现展开:

import pandas as pd

# 构造原始频数数据集
df = pd.DataFrame({
    'Col1': ['Good', 'Good', 'Good', 'Good', 'Bad', 'Bad', 'Bad', 'Bad'],
    'Col2': ['Poor', 'Poor', 'Rich', 'Rich', 'Poor', 'Poor', 'Rich', 'Rich'],
    'y': [0, 1, 1, 0, 0, 1, 1, 0],
    'n': [0, 0, 13, 8, 8, 0, 15, 5]
})

# 过滤无效行(n=0),按n值重复行,最后清理索引和冗余列
expanded_df = df[df['n'] > 0].loc[df.index.repeat(df['n'])].drop('n', axis=1).reset_index(drop=True)

# 查看结果
print(expanded_df)

方法2:R语言

使用dplyr包的uncount()函数(专门处理频数展开场景):

library(dplyr)

# 构造原始频数数据集
df <- data.frame(
  Col1 = c("Good", "Good", "Good", "Good", "Bad", "Bad", "Bad", "Bad"),
  Col2 = c("Poor", "Poor", "Rich", "Rich", "Poor", "Poor", "Rich", "Rich"),
  y = c(0, 1, 1, 0, 0, 1, 1, 0),
  n = c(0, 0, 13, 8, 8, 0, 15, 5)
)

# 自动按n值展开,n=0的行会被直接排除
expanded_df <- df %>% uncount(n)

# 查看结果
print(expanded_df)

内容的提问来源于stack exchange,提问作者Ahir Bhairav Orai

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:51:55