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

R语言中Spell Data转长格式:生成含时间与存在标识的数据集

Spell数据长格式重塑方案

原始数据说明

我有一组Spell数据,包含ID、group(组标识)和spell_length(持续时长)三个字段,示例数据生成代码如下:

d <- data.frame(ID = 1:10, 
                group = sample(c("a", "b"), 10, replace = T), 
                spell_length = sample(1:3,10, replace = T))

查看前6行数据结果:

ID group spell_length
   1     b            1
   2     a            1
   3     a            3
   4     b            1
   5     a            1
   6     b            2

需求说明

需要将上述数据重塑为长格式,最终包含4个变量:

  • ID:原数据ID
  • group:原数据组标识
  • time:取值范围为1至原数据中最大的spell_length(示例中为1-3)
  • indicator:取值0或1,标识对应ID在该time点是否仍处于spell中(例如spell_length为1时,time=2和3的indicator为0)

预期输出示例如下:

ID group  time indicator
 1     b     1        1
 1     b     2        0
 1     b     3        0
 2     a     1        1
 2     a     2        0
 2     a     3        0
 3     a     1        1
 3     a     2        1
 3     a     3        1

解决方案

可以用tidyr和dplyr包实现,步骤如下:

  1. 确定原始数据中最大的spell_length值
  2. 为每个ID扩展出1到最大时长的time序列
  3. 计算indicator:当time ≤ spell_length时为1,否则为0

代码实现:

library(tidyr)
library(dplyr)

# 确定最大时长
max_spell <- max(d$spell_length)

# 重塑数据
result <- d %>%
  # 为每个ID扩展time列,从1到max_spell
  uncount(max_spell, .id = "time") %>%
  # 计算indicator
  mutate(indicator = as.integer(time <= spell_length)) %>%
  # 按ID和time排序
  arrange(ID, time)

# 查看结果
head(result, 9)

运行后即可得到符合要求的长格式数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:33:20