我发现该dplyr函数cur_data()已被弃用,取而代之的是pick(). pick()但是,当尝试将行添加到分组数据框中的每个组时,我对如何使用感到困惑。我正在清理一些奇怪的数据,需要将行插入到每个组中,以传播分组变量的值,同时将特定值插入到随附的列中。
这是用于cur_data()生成我想要的输出的示例代码:
df <- tibble::tribble(\n ~id, ~val,\n "A", 95,\n "A", 20,\n "A", 45,\n "B", 10,\n "B", 50,\n "C", 80\n)\n\ndf_new_rows <- df |>\n dplyr::group_by(id) |>\n dplyr::reframe(tibble::add_row(dplyr::cur_data(), val = 100)) |>\n dplyr::ungroup()\nRun Code Online (Sandbox Code Playgroud)\n100这是所需的输出 - 列中的行val已被插入:
# A tibble: 9 \xc3\x97 2\n id val\n <chr> <dbl>\n1 A 95\n2 A 20\n3 A 45\n4 A 100\n5 B 10\n6 B 50\n7 B 100\n8 C 80\n9 C 100\nRun Code Online (Sandbox Code Playgroud)\n我如何使用pick()或其他功能来做到这一点?出于开发原因,我想使用基础R或tidyverse函数,但如果没有办法做到这一点,我愿意接受其他建议。预先感谢您的任何帮助!
小智 6
您可以使用group_modify()将函数应用于分组 tibble 中的每个组,并返回分组 tibble。
df <- tibble::tibble(
id = c("A", "A", "A", "B", "B", "C"),
val = c(95, 20, 45, 10, 50, 80)
)
add_row_func <- function(df) {
tibble::add_row(df, id = df$id[1], val = 100)
}
df_new_rows <- df |>
dplyr::group_by(id) |>
dplyr::group_modify(add_row_func) |>
dplyr::ungroup()
print(df_new_rows)
Run Code Online (Sandbox Code Playgroud)