gpt4 book ai didi

r - 如何在 dplyr::across() 中使用 n() 按组计算行数?

转载 作者:行者123 更新时间:2023-12-04 08:07:21 24 4
gpt4 key购买 nike

在以前版本的 dplyr 中,如果我想使用 summarise() 获取除其他汇总值之外的行数,我可以做类似的事情

library(tidyverse)

df <- tibble(
group = c("A", "A", "B", "B", "C"),
value = c(1, 2, 3, 4, 5)
)

df %>%
group_by(group) %>%
summarise(total = sum(value), count = n())

`summarise()` ungrouping output (override with `.groups` argument)

# A tibble: 3 x 3
group total count
<chr> <dbl> <int>
1 A 3 2
2 B 7 2
3 C 5 1
我本能地使用新 across() 获得相同的输出功能将是
df %>%
group_by(group) %>%
summarise(across(value, list(sum = sum, count = n)))
Error: Problem with `summarise()` input `..1`.
x unused argument (col)
ℹ Input `..1` is `across(value, list(sum = sum, count = n))`.
ℹ The error occurred in group 1: group = "A".
该问题特定于 n()函数,只需调用 sum()按预期工作:
df %>%
group_by(group) %>%
summarise(across(value, list(sum = sum)))
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 3 x 2
group value_sum
<chr> <dbl>
1 A 3
2 B 7
3 C 5
我尝试了各种语法变体(使用 lambdas,试验 cur_group() 等),但无济于事。我将如何在 across() 内获得所需的结果?

最佳答案

我们可以将 lambda 函数用于 n()sum如果没有要指定的其他参数,则可以通过调用它来调用

library(dplyr)
df %>%
group_by(group) %>%
summarise(across(value, list(sum = sum, count = ~ n())), .groups = 'drop')
-输出
# A tibble: 3 x 3
# group value_sum value_count
# <chr> <dbl> <int>
#1 A 3 2
#2 B 7 2
#3 C 5 1

关于r - 如何在 dplyr::across() 中使用 n() 按组计算行数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66161658/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com