'Unable to choose top_n(100)
I need to choose the top 100 rows in descending order Original Table
route member_casual n
A member 5
A casual 10
B member 21
B casual 9
C member 30
C casual 5
Required Table
route member_casual n
C member 30
B member 21
A member 5
A casual 10
B casual 9
C casual 5
code that I have already tried:
df %>% group_by(route,member_casual) %>% count() %>% top_n(100)
df %>% group_by(route,member_casual) %>% count() %>% top_n(100, wt = "n")
The end goal is to make a geom_col to compare top 100 or 10 common routes between members and casual riders, with "n" on the x axis and "route" on y axis.
Solution 1:[1]
You need to set .by_group to TRUE:
dat <- structure(list(route = c("A", "A", "B", "B", "C", "C"), member_casual = c("member",
"casual", "member", "casual", "member", "casual"), n = c(5L,
10L, 21L, 9L, 30L, 5L)), class = "data.frame", row.names = c(NA,
-6L))
dat |> group_by(member_casual)|>
arrange(desc(n), .by_group = TRUE) |>
arrange(desc(member_casual))
# A tibble: 6 × 3
# Groups: member_casual [2]
# route member_casual n
# <chr> <chr> <int>
#1 C member 30
#2 B member 21
#3 A member 5
#4 A casual 10
#5 B casual 9
#6 C casual 5
Then, you can select top n from the result:
dat |>
group_by(member_casual)|>
arrange(desc(n), .by_group = TRUE) |>
arrange(desc(member_casual)) |> top_n(2)
Selecting by n
# A tibble: 4 × 3
# Groups: member_casual [2]
route member_casual n
<chr> <chr> <int>
1 C member 30
2 B member 21
3 A casual 10
4 B casual 9
Note that top_n() has been superseded in favour of slice_min()/slice_max(), as @Limey has kindly pointed out in the comment. Hence, it's recommended to use slice_max() in this case.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 |
