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

在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工具,有两种便捷方式:

  1. 结合slice和行号重复:
library(dplyr)

expanded_df <- df %>%
  slice(rep(row_number(), Frequency)) %>%
  # 可选:重置行名
  mutate(row_id = row_number()) %>%
  select(-row_id)
  1. 用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:36:21