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

如何用tidyverse为tibble各分组的非分组列添加额外行?

如何为数据框中每个id分组的非分组列添加额外行

你需要为每个id分组生成包含原行,以及day=原day-1、station=原station-1的额外行,最终得到预期的6行数据。以下是可行的解决方案:

方法一:使用reframe生成分组内的多行数据

reframe可以在每个分组内生成多行结果,直接构造出我们需要的两行数据:

library(tidyverse)

df <- tibble(id = c("A", "B", "C"), day = c(3, 1, 2), station = c(10, 9, 2))

df %>%
  group_by(id) %>%
  reframe(
    day = c(day - 1, day),
    station = c(station - 1, station)
  ) %>%
  arrange(id, day)

运行结果与预期一致:

# A tibble: 6 × 3
  id      day station
  <chr> <dbl>   <dbl>
1 A         2       9
2 A         3      10
3 B         0       8
4 B         1       9
5 C         1       1
6 C         2       2

方法二:生成额外行后与原数据合并

先构造每个分组的额外行,再和原数据绑定后排序:

# 生成每个id对应的额外行
extra_rows <- df %>%
  mutate(
    day = day - 1,
    station = station - 1
  )

# 合并并排序
bind_rows(extra_rows, df) %>%
  arrange(id, day)

关于你之前尝试的问题说明

  • 使用complete(day = (day -1):day)时,仅会扩展day列的取值范围,但station列没有对应的填充逻辑,因此会出现NA值。
  • mutate(across(c("day", "station"), complete((.x - 1):.x)))的写法错误,因为complete是数据框级别的行生成函数,不能嵌套在用于修改列值的mutate中。

内容的提问来源于stack exchange,提问作者medium-dimensional

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:35:20