如何用R根据频数统计扩展数据集生成观测记录?
问题描述
现有一份基于Col1、Col2和y的频数统计数据,表格如下:
| Col1 | Col2 | y | n |
|---|---|---|---|
| Good | Poor | 0 | 0 |
| Good | Poor | 1 | 0 |
| Good | Rich | 1 | 13 |
| Good | Rich | 0 | 8 |
| Bad | Poor | 0 | 8 |
| Bad | Poor | 1 | 0 |
| Bad | Rich | 1 | 15 |
| Bad | Rich | 0 | 5 |
需要将这份频数表扩展为原始观测记录:按照每组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
相关产品推荐
相关产品推荐

