【发布时间】:2019-04-29 16:43:07
【问题描述】:
大图:我正在尝试设置一个导出,它有一个路由作为行和每个值的列。
此代码:我正在尝试为每条路线选择前三个转移(使用slice(1:3),因为我需要的值不超过三个。top_n() 允许平局)。然后,我尝试spread() 创建 6 列:每列一个名称和一个 pct。
如果我现在要传播数据,名称将变为列,但我需要将名称保留在行中(请参阅所需的输出)。我想将列名创建为用于spread() 的键列。我的方法是创建一个错误。我在想其他策略时遇到了麻烦。
数据框:
# A tibble: 7 x 3
route_shortname transfer_to pct
<chr> <chr> <dbl>
1 A D 0.5
2 A E 0.5
3 B F 0.667
4 B G 0.333
5 C D 0.111
6 C E 0.111
7 C G 0.111
期望的输出:
# A tibble: 3 x 7
route_shortname transfer1 transfer1_pct transfer2 transfer2_pct transfer3 transfer3_pct
<chr> <chr> <dbl> <chr> <dbl> <chr> <dbl>
1 A D 0.5 E 0.5 NA NA
2 B F 0.667 G 0.333 NA NA
3 C D 0.111 E 0.111 G 0.111
代表:
library(tidyverse)
sample_data <- tibble::tribble(
~route_shortname, ~transfer_to, ~pct,
"A", "D", 0.5,
"A", "E", 0.5,
"B", "F", 0.666666666666667,
"B", "G", 0.333333333333333,
"C", "D", 0.111111111111111,
"C", "E", 0.111111111111111,
"C", "G", 0.111111111111111
)
transfer_to_table <- sample_data %>%
group_by(route_shortname) %>%
mutate(key = c("transfer1", "transfer2", "transfer3"))
#> Error in mutate_impl(.data, dots): Column `key` must be length 2 (the group size) or one, not 3
【问题讨论】: