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

R语言dplyr实现:分组单条记录时复制行并标注前后测时间

dplyr实现pre-post前后测缺失后测数据补全方案

问题场景

现有R环境存储的pre-post前后测数据集,部分按episode字段划分的分组仅存在前测观测值,初始示例数据构造代码:

episode <- c('1','1','2','3','3')
score <- c('44','12','37','40','9')
df <- data.frame(episode,score)

处理要求:

  • 优先使用dplyr包实现
  • 所有仅含1条记录的episode分组,复制该条唯一记录补全为2条
  • 新增time字段,标记每条记录为前测(值为1)/后测(值为2)
  • 最终输出结构匹配如下预期:
episodescoretime
1441
1122
2371
2372
3401
392

实现代码

核心逻辑为按episode分组后,对单记录组重复取首行补全为2行,再按组内行顺序生成time标记,代码简洁易读:

library(dplyr)

result <- df %>%
  group_by(episode) %>%
  # 单条记录的分组重复取第1行凑2条,已有2条的分组保留原有两行顺序
  slice(c(1, if(n() == 1) 1 else 2)) %>%
  # 按组内行顺序生成time字段
  mutate(time = row_number()) %>%
  ungroup()

如果偏好更易读的分支写法,也可以使用group_modify版本,逻辑完全一致:

result <- df %>%
  group_by(episode) %>%
  group_modify(~ {
    # 单条记录则复制一行
    if(nrow(.x) == 1) .x <- .x[rep(1, 2), ]
    .x
  }) %>%
  mutate(time = row_number()) %>%
  ungroup()

运行代码后得到的结果完全匹配预期结构:原本就有2条记录的分组会按原始顺序标记前测、后测;仅存前测的分组复制原记录补全后测,score值与原前测记录保持一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 09:42:25