如何基于R语言dataframe指定列值复制新增对应数量的重复行
R实现按指定列数值重复行的方法
以下两种方案都可以满足需求,可根据自己的使用习惯选择:
方案1:基础R原生实现(无需依赖额外包)
直接使用rep()函数匹配行索引和重复次数即可,代码如下:
# 构造示例数据 factor1 = c("1", "2", "3", "4") group = c("Group_A", "Group_B", "Group_C", "Group_D") cat_count = c(3,5,1,8) df <- data.frame(factor1, group, cat_count) # 按cat_count列的值重复对应行 df_expanded <- df[rep(seq(nrow(df)), df$cat_count), ] # 重置行号(可选,不需要可以省略) rownames(df_expanded) <- NULL # 查看结果 View(df_expanded)
逻辑说明:rep(seq(nrow(df)), df$cat_count)会生成和最终行数等长的行索引序列,每个原行的索引重复次数和对应行cat_count的取值一致,直接按索引取子集就能得到重复后的结果。
方案2:tidyverse生态实现(代码更简洁易读)
使用tidyr包内置的uncount()函数,该函数就是专门为「按计数列展开行」的场景设计的,默认会删除计数列,增加.remove = FALSE参数即可保留原cat_count列:
# 加载需要的包,未安装先运行 install.packages("tidyr") library(tidyr) df_expanded <- df %>% uncount(cat_count, .remove = FALSE) # 查看结果 View(df_expanded)
两种方案输出的结果完全一致,都和你需求的示例输出匹配。
内容的提问来源于stack exchange,提问作者CJF
相关产品推荐
相关产品推荐

