r - 如何在 dplyr::across() 中使用 n() 按组计算行数?
问题描述
在以前版本的 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()
?
解决方案
如果没有要指定的其他参数,我们可以使用 lamdba 函数,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
推荐阅读
- javascript - 如何为不同的 Vue 布局使用不同的资源?
- laravel - 在 Kubernetes pod 中,不能强制 Laravel Echo(使用 Pusher)通过端口 6001 协议而不是端口 443 上的 wss 连接
- php - 数组未将正确形式的控制器渲染到树枝
- r - 安排多个 R 脚本按顺序运行
- c# - 如何继续添加带有免费响应文本框的整数?
- python - 如何将新列添加到具有 0 和 1 值的特定列的值的数据框中
- excel - 更改活动工作表上的数据时,下工作表上的 VBA Excel 自动增量值
- java - 最大化 JFrame | 没有全屏
- google-cloud-platform - 在 GKE 气流中通过 KubernetesPodOperator 安装卷问题
- react-native - 如何在本机反应中将整个屏幕分成各种大小的部分