在组内使用 ntile
using ntile within a group
我正在尝试计算每组数据帧中的五分位数。如果我这样做:
mtcars %>%
group_by(gear,carb) %>%
summarise(total = sum(wt), .groups = "keep") %>%
mutate(rank = ntile(total,5))
rank
列中的所有条目都等于 1。我在这里做错了什么?
因为当您 group_by(gear, carb)
时,这两个变量的唯一组合被视为一个组。由于您使用了 summrise(..., .groups = "keep")
,输入中的所有分组变量都将被保留。在这种情况下,这两列只有一个唯一的组合,因此,每一行都在它自己的组中(注意 tibble
输出中的 # Groups: gear, carb [11]
)。所以,你每组计算一个元素ntile
,结果当然是1.
如果你不包含.groups = "keep"
参数,最后一个分组变量将被丢弃(carb
将被丢弃),你可以看到每个gear
的排名(注意# Groups: gear [3]
).
documentation(?dplyr::summarise
)中的更多信息:
When .groups is not specified, it is chosen based on the number of rows of the results:
- If all the results have 1 row, you get "drop_last".
- If the number of rows varies, you get "keep".
library(dplyr)
mtcars %>%
group_by(gear,carb) %>%
summarise(total = sum(wt)) %>%
mutate(rank = ntile(total, 5))
# A tibble: 11 × 4
# Groups: gear [3]
gear carb total rank
<dbl> <dbl> <dbl> <int>
1 3 1 9.14 1
2 3 2 14.2 3
3 3 3 11.6 2
4 3 4 23.4 4
5 4 1 8.29 1
6 4 2 10.7 2
7 4 4 12.4 3
8 5 2 3.65 4
9 5 4 3.17 2
10 5 6 2.77 1
11 5 8 3.57 3
我正在尝试计算每组数据帧中的五分位数。如果我这样做:
mtcars %>%
group_by(gear,carb) %>%
summarise(total = sum(wt), .groups = "keep") %>%
mutate(rank = ntile(total,5))
rank
列中的所有条目都等于 1。我在这里做错了什么?
因为当您 group_by(gear, carb)
时,这两个变量的唯一组合被视为一个组。由于您使用了 summrise(..., .groups = "keep")
,输入中的所有分组变量都将被保留。在这种情况下,这两列只有一个唯一的组合,因此,每一行都在它自己的组中(注意 tibble
输出中的 # Groups: gear, carb [11]
)。所以,你每组计算一个元素ntile
,结果当然是1.
如果你不包含.groups = "keep"
参数,最后一个分组变量将被丢弃(carb
将被丢弃),你可以看到每个gear
的排名(注意# Groups: gear [3]
).
documentation(?dplyr::summarise
)中的更多信息:
When .groups is not specified, it is chosen based on the number of rows of the results:
- If all the results have 1 row, you get "drop_last".
- If the number of rows varies, you get "keep".
library(dplyr)
mtcars %>%
group_by(gear,carb) %>%
summarise(total = sum(wt)) %>%
mutate(rank = ntile(total, 5))
# A tibble: 11 × 4
# Groups: gear [3]
gear carb total rank
<dbl> <dbl> <dbl> <int>
1 3 1 9.14 1
2 3 2 14.2 3
3 3 3 11.6 2
4 3 4 23.4 4
5 4 1 8.29 1
6 4 2 10.7 2
7 4 4 12.4 3
8 5 2 3.65 4
9 5 4 3.17 2
10 5 6 2.77 1
11 5 8 3.57 3