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

如何用pick()替代已弃用的cur_data()为分组数据框添加行

问题描述

我了解到dplyr中的cur_data()函数已被弃用,官方推荐使用pick()替代,但不知道如何在分组数据框中添加行时使用pick()。我需要为每个分组插入一行,保留分组变量的值,同时在val列插入特定值100。

原使用cur_data()实现的代码如下:

df <- tibble::tribble(
  ~id,   ~val,
  "A",   95,
  "A",   20,
  "A",   45,
  "B",   10,
  "B",   50,
  "C",   80
)

df_new_rows <- df |>
  dplyr::group_by(id) |>
  dplyr::reframe(tibble::add_row(dplyr::cur_data(), val = 100)) |>
  dplyr::ungroup()

预期输出:

# A tibble: 9 × 2
  id      val
  <chr> <dbl>
1 A        95
2 A        20
3 A        45
4 A       100
5 B        10
6 B        50
7 B       100
8 C        80
9 C       100
解决方案

方法1:使用pick()替代cur_data()

用pick(everything())获取当前分组的所有列(包括分组变量),结合add_row添加新行,完全替代cur_data()的作用:

df_new_rows <- df |>
  dplyr::group_by(id) |>
  dplyr::reframe(
    tibble::add_row(pick(everything()), val = 100)
  ) |>
  dplyr::ungroup()

方法2:group_modify结合bind_rows

通过group_modify对每个分组直接合并原数据和新增行,逻辑更直观:

df_new_rows <- df |>
  dplyr::group_by(id) |>
  dplyr::group_modify(
    ~ dplyr::bind_rows(.x, tibble::tibble(val = 100))
  ) |>
  dplyr::ungroup()

其中.x代表当前分组的数据框,新增行自动继承分组变量id的值。

方法3:构造新增行后合并

无需分组操作,先提取唯一分组值构造新增行,再与原数据合并排序:

new_rows <- tibble::tibble(
  id = unique(df$id),
  val = 100
)

df_new_rows <- dplyr::bind_rows(df, new_rows) |>
  dplyr::arrange(id)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:13:29