在R中实现按Column B数值生成连续行并填充表格的方法
R语言实现表格行扩展的方法
首先构造与你提供的原表格一致的示例数据:
df <- data.frame( Column_A = c(100, 200, 300), Column_B = c(3, 4, 1) )
方法1:Base R原生实现
无需额外安装包,直接用基础函数完成:
result_base <- data.frame( Column_A = rep(df$Column_A, df$Column_B), Column_B = sequence(df$Column_B) )
rep(df$Column_A, df$Column_B):将每个Column_A的值重复对应Column_B的次数sequence(df$Column_B):生成从1到每个Column_B数值的连续序列
方法2:dplyr + tidyr tidyverse风格实现
适合习惯tidyverse语法的用户,提供两种写法:
写法A:扩展行后生成组内序号
library(dplyr) library(tidyr) result_dplyr <- df %>% uncount(Column_B) %>% # 按Column_B的数值扩展行 group_by(Column_A) %>% mutate(Column_B = row_number()) %>% # 生成每组内的连续序号 ungroup()
写法B:按行直接展开序列
result_dplyr2 <- df %>% rowwise() %>% expand(Column_A, Column_B = 1:Column_B) %>% # 每行生成1到Column_B的序列 ungroup()
方法3:data.table高效实现
适合处理大数据量,语法简洁执行速度快:
library(data.table) dt <- as.data.table(df) result_dt <- dt[, .(Column_B = 1:Column_B), by = Column_A]
- 通过
by = Column_A分组,每组内直接生成1:Column_B的序列,自动拼接成最终结果表
内容的提问来源于stack exchange,提问作者martingale
相关产品推荐
相关产品推荐

