添加要在spread()中使用的新列名
大图:我正在尝试设置一个导出,该导出将一个路由作为行,并为每个值设置列 这段代码:我试图使用切片1:3为每条路线选择前三个传输,因为我需要的值不超过三个。上衣可以系领带。然后,我尝试创建6列:每个列有一个名称和一个pct 如果我现在分散数据,名称将变成列,但我需要将名称保留在行中,以查看所需的输出。我想创建列名作为用于传播的键列。我的方法是制造一个错误。我很难想出另一个策略 数据帧: 一个tibble:7x3 路由\u短名称传输\u到pct 1 A D 0.5 2 A E 0.5 3 B F 0.667 4 B G 0.333 5cd0.111 6ce0.111 7 C G 0.111 期望输出: 一个tibble:3x7 路由\u短名称传输1传输1\u pct传输2\u pct传输3\u pct传输 1 A D 0.5 E 0.5 NA 2bf0.667g0.333na 3cd0.111e0.111g0.111 雷普雷克斯: 图书馆管理员 样本数据% mutatekey=CtrTransfer1,transfer2,transfer3 >mutate_impl.data,dots出错:列'key'的长度必须是组大小的2或1,而不是3添加要在spread()中使用的新列名,r,dplyr,tidyr,R,Dplyr,Tidyr,大图:我正在尝试设置一个导出,该导出将一个路由作为行,并为每个值设置列 这段代码:我试图使用切片1:3为每条路线选择前三个传输,因为我需要的值不超过三个。上衣可以系领带。然后,我尝试创建6列:每个列有一个名称和一个pct 如果我现在分散数据,名称将变成列,但我需要将名称保留在行中,以查看所需的输出。我想创建列名作为用于传播的键列。我的方法是制造一个错误。我很难想出另一个策略 数据帧: 一个tibble:7x3 路由\u短名称传输\u到pct 1 A D 0.5 2 A E 0.5 3 B F
虽然您用tidyverse软件包标记了这个问题,但这里有一个选项,使用data.table中的dcast,您可以在一条公认的长线中进行重塑
library(data.table)
setDT(sample_data)
dcast(sample_data, route_shortname ~ rowid(route_shortname), value.var = c('transfer_to', 'pct'))
# route_shortname transfer_to_1 transfer_to_2 transfer_to_3 pct_1 pct_2 pct_3
#1: A D E <NA> 0.5000000 0.5000000 NA
#2: B F G <NA> 0.6666667 0.3333333 NA
#3: C D E G 0.1111111 0.1111111 0.1111111
在这两种情况下,您都需要重命名列,但这应该不会太难。是否可以在此处使用一个函数来避免多次调用分隔列?像是带转移的突变,funs。。。或者利用purrr?我不知道有什么方法可以执行多个单独的操作,即在多个列中执行。data.table包,如下面的答案,或重塑包可以做到这一点。
library(data.table)
setDT(sample_data)
dcast(sample_data, route_shortname ~ rowid(route_shortname), value.var = c('transfer_to', 'pct'))
# route_shortname transfer_to_1 transfer_to_2 transfer_to_3 pct_1 pct_2 pct_3
#1: A D E <NA> 0.5000000 0.5000000 NA
#2: B F G <NA> 0.6666667 0.3333333 NA
#3: C D E G 0.1111111 0.1111111 0.1111111
sample_data <- as.data.frame(sample_data) # does not work with tibbles for some reason
sample_data$idx <- with(sample_data,
ave(route_shortname, route_shortname, FUN = seq_along))
reshape(sample_data, idvar = "route_shortname", timevar = "idx", direction = "wide", sep = "_")
# route_shortname transfer_to_1 pct_1 transfer_to_2 pct_2 transfer_to_3 pct_3
#1 A D 0.5000000 E 0.5000000 <NA> NA
#3 B F 0.6666667 G 0.3333333 <NA> NA
#5 C D 0.1111111 E 0.1111111 G 0.1111111