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

如何基于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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 13:48:00