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

如何聚合同一时间窗口内的数据?R语言tidy数据整理方案

解决方法

你的问题出在spread函数只会对每行存在的tier值填充,其他行对应列自然为空。要实现将ortho的值填充到其时间窗口内的所有行,可按以下步骤操作:

方法1:先提取ortho信息再合并

library(tidyverse)

# 提取ortho层级的时间范围和对应值
ortho_detail <- dfgs_final %>%
  filter(tier == "ortho") %>%
  select(ortho = value, ortho_start = begin_ms, ortho_end = end_ms)

# 转换宽格式并关联ortho信息
target_df <- dfgs_final %>%
  spread(key = tier, value = value) %>%
  cross_join(ortho_detail) %>%
  # 筛选时间落在ortho窗口内的行(原数据所有行都满足)
  filter(begin_ms >= ortho_start & end_ms <= ortho_end) %>%
  # 调整列顺序并移除临时列
  select(ortho, begin_ms, end_ms, words, metric, reaction)

方法2:先添加ortho列再转宽格式

library(tidyverse)

# 提取ortho的核心信息
ortho_value <- dfgs_final$value[dfgs_final$tier == "ortho"]
ortho_start <- dfgs_final$begin_ms[dfgs_final$tier == "ortho"]
ortho_end <- dfgs_final$end_ms[dfgs_final$tier == "ortho"]

# 预处理数据并转换格式
target_df <- dfgs_final %>%
  # 给符合时间范围的行标记ortho值
  mutate(ortho = ifelse(begin_ms >= ortho_start & end_ms <= ortho_end, ortho_value, NA)) %>%
  spread(key = tier, value = value) %>%
  # 填充ortho列的空值
  mutate(ortho = replace_na(ortho, ortho_value)) %>%
  select(ortho, begin_ms, end_ms, words, metric, reaction)

运行上述任意一种代码,都能得到你期望的目标DataFrame结构。

内容的提问来源于stack exchange,提问作者cambar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 01:43:38