在R语言中将数据框频率列转换为对应行数的原始数据
按Frequency列展开数据框记录
先定义原始数据框:
df <- structure(list(Feat1 = c("A", "B", "A", "B"), Time = c("Start", "Start", "Finish", "Finish"), Value = c("Value1", "Value2", "Value3", "Value2"), feat2 = c("Alpha", "Bravo", "Alpha", "Bravo"), Frequency = c(2L, 4L, 5L, 3L)), class = "data.frame", row.names = c(NA, -4L))
基础R解法
无需额外包,直接通过行索引重复实现:
# 生成对应重复次数的行索引,提取行 expanded_df <- df[rep(1:nrow(df), df$Frequency), ] # 重置行名(可选操作) rownames(expanded_df) <- NULL
dplyr解法
如果习惯用tidyverse工具,有两种便捷方式:
- 结合
slice和行号重复:
library(dplyr) expanded_df <- df %>% slice(rep(row_number(), Frequency)) %>% # 可选:重置行名 mutate(row_id = row_number()) %>% select(-row_id)
- 用
uncount一步到位(需dplyr 1.0.0及以上版本):
expanded_df <- df %>% uncount(Frequency)
data.table解法
处理大数据集时效率更优:
library(data.table) # 转换为data.table格式 setDT(df) # 按Frequency值重复行 expanded_df <- df[rep(.I, Frequency)] # 可选:转回普通data.frame并重置行名 setDF(expanded_df) rownames(expanded_df) <- NULL
内容的提问来源于stack exchange,提问作者rj44
相关产品推荐
相关产品推荐

