在我的数据集中,我计算了大约200个站点每小时(0-23)自行车站开始的行程次数。
> head(test)
Start.station.number hour number
1 31000 0 16
2 31000 1 1
3 31000 2 7
4 31000 3 1
5 31000 4 2
6 31000 5 12
我的目标是每小时获得十大站点,但是,很多一些高人气站点可能会有相同的每小时行程数。例如,如果站B,站A和站C都具有相同的行程次数并且在上午7点并列第10位,那么其中一个应该随机选择,选择哪一个并不重要。在R中,无论一些站点具有相同的计数(这与每小时head(n=10)
类似的功能),如何按小时计算前十个站点?
以下是数据样本
> dput(test)
structure(list(Start.station.number = c(31000L, 31000L, 31000L,
31000L, 31000L, 31000L, 31000L, 31000L, 31000L, 31000L, 31000L,
31000L, 31000L, 31000L, 31000L, 31000L, 31000L, 31000L, 31000L,
31000L, 31000L, 31000L, 31000L, 31000L, 31001L, 31001L, 31001L,
31001L, 31001L, 31001L, 31001L, 31001L, 31001L, 31001L, 31001L,
31001L, 31001L, 31001L, 31001L, 31001L, 31001L, 31001L, 31001L,
31001L, 31001L, 31001L, 31001L, 31002L, 31002L, 31002L), hour = c(0L,
1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L,
15L, 16L, 17L, 18L, 19L, 20L, 21L, 22L, 23L, 0L, 2L, 3L, 4L,
5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L,
19L, 20L, 21L, 22L, 23L, 0L, 1L, 2L), number = c(16L, 1L, 7L,
1L, 2L, 12L, 27L, 33L, 36L, 41L, 50L, 36L, 39L, 34L, 22L, 38L,
40L, 27L, 37L, 31L, 16L, 15L, 16L, 8L, 3L, 3L, 1L, 1L, 2L, 15L,
30L, 74L, 47L, 49L, 40L, 43L, 54L, 51L, 56L, 48L, 99L, 75L, 48L,
28L, 24L, 14L, 3L, 16L, 18L, 3L)), .Names = c("Start.station.number",
"hour", "number"), row.names = c(NA, 50L), class = "data.frame")
答案 0 :(得分:2)
另一个使用dplyr
的示例,这次使用slice
。我还添加了一个随机变量来确保关系是随机排序的
library(dplyr)
set.seed(1)
df <- tibble(Start.station.number = sample(1:20, 1000, TRUE),
hour = sample(0:23, 1000, TRUE),
number = sample(1:20, 1000, TRUE),
random = runif(1000))
df %>%
group_by(hour) %>%
arrange(-number, random, .by_group = TRUE) %>%
slice(1:10)
#> # A tibble: 240 x 4
#> # Groups: hour [24]
#> Start.station.number hour number random
#> <int> <int> <int> <dbl>
#> 1 9 0 20 0.22558247
#> 2 1 0 19 0.19954013
#> 3 3 0 19 0.71950937
#> 4 19 0 19 0.81171457
#> 5 15 0 19 0.91195428
#> 6 17 0 18 0.01283631
#> 7 8 0 18 0.95778679
#> 8 14 0 17 0.06196987
#> 9 10 0 17 0.18180938
#> 10 19 0 17 0.23981459
#> # ... with 230 more rows
答案 1 :(得分:0)
以下是使用margin-radius:20px;
background-color:green;
完全返回10的示例:
dplyr
如果您想要关系,您可以使用便利包装library(dplyr)
set.seed(1)
df <- tibble(Start.station.number = sample(1:20, 1000, T),
hour = sample(1:24, 1000, T),
number = sample(1:20, 1000, T))
df %>% group_by(hour) %>% arrange(hour, -number) %>% mutate(rank = row_number()) %>% filter(rank < 11) %>% select(-rank)
:
top_n