最好用一个例子来解释这个问题。
library(dplyr)
library(data.table)
df <- data.frame(
id = c(1,1,2,2),
x = 1:4
)
假设我们需要得到一个组的平均值,乘以组的值。在data.table
中,这是直接和直观的。
> setDT(df)[, .(mean(x) * id), by=id]
id V1
1: 1 1.5
2: 2 7.0
但是在dplyr
中,有一个警告和行重复。
> df |> group_by(id) |> summarise(mean(x) * id)
`summarise()` has grouped output by 'id'. You can override using the `.groups` argument.
# A tibble: 4 × 2
# Groups: id [2]
id `mean(x) * id`
<dbl> <dbl>
1 1 1.5
2 1 1.5
3 2 7
4 2 7
Warning message:
Returning more (or less) than 1 row per `summarise()` group was deprecated in dplyr 1.1.0.
ℹ Please use `reframe()` instead.
我意识到我可以通过添加一个额外的unique()
步骤来消除重复,但我不禁感到dplyr
在本例中没有得到应有的使用。
2条答案
按热度按时间uttx8gqw1#
您可以使用
cur_group()
获取当前组信息。然后从那里提取身份如果有更多的分组列,
anauzrmj2#
如果我们想使用分组变量,我们必须使用
cur_group_id()
。