如何在R中根据指定值调整数据集中各ID对应的观测行数量
R实现按指定列数值重复行的方法
你需要的是根据nb列的数值将对应行重复指定次数,有多种成熟的实现方案,以下方法均可以实现「ID=1生成5行、ID=2生成12行」的需求:
方法1:tidyverse 生态专用函数(最简洁直观)
使用tidyr包的uncount()函数,是官方专门为该类需求设计的功能:
# 加载包 library(tidyr) # 假设你的原数据框名为df result <- uncount(df, weights = nb, .remove = FALSE)
参数说明:
weights指定用于控制重复次数的列,这里填nb即可.remove = FALSE保留原数据中的nb列,默认值为TRUE会删除该列,可根据需求调整
方法2:Base R 实现(无需安装额外包)
用基础的行索引重复即可实现:
result <- df[rep(seq_len(nrow(df)), df$nb), ]
如果需要重置行号,可以再加一步:
rownames(result) <- NULL
方法3:data.table 实现(适合超大数据量,性能最优)
library(data.table) # 转换为data.table格式后按索引重复 setDT(df) result <- df[rep(1:.N, nb)]
以上三种方法都可以直接实现你需要的转换效果,可根据你的使用场景选择。
内容的提问来源于stack exchange,提问作者Ruser-lab9
相关产品推荐
相关产品推荐

