【发布时间】:2018-12-09 06:36:58
【问题描述】:
我有一个数据集,其中一列是由 1 个数字组成的字符串,表示星期几,后面是任意数量的 10 位数字块:
# A tibble: 7 x 3
respid record_type record_data
<chr> <chr> <chr>
1 20163911123050111 6 1000456561200035759120000989800
2 20163911123050111 6 2000405161200031719120000999900
3 20163911123050111 6 30004071212000320212200032832220003545620
4 20163911123050111 6 40004051612000326272200033032220003545620
5 20163911123050111 6 5036803031200040404120004051812000434361200045556120003575910
6 20163911123050111 6 6000411161200031720120003283121000344462100035759120004707410
7 20163911123050111 6 70004111312000314261200043334120004535610
我想要一种优雅的方式将其转换为长格式:
1. 将第 3 列拆分为长度为 1 的固定块,然后是一系列长度为 10 个字符
2. 从宽到长
例如,上面的第一行将变为 3 行:
respid record_type dayofweek chunk
<chr> <chr> <chr> <chr>
1 20163911123050111 6 1 0004565612
2 20163911123050111 6 1 0003575912
3 20163911123050111 6 1 0000989800
到目前为止,我在第一部分使用此代码,但它是一个循环...:
my_list<-list()
for(i in 1:nrow(mydf)){
temp_list<-list()
temp_list
temp_list$respid <- mydf[i,1]
temp_list$record_type <- mydf[i,2]
temp_list$dayofweek <- stringi::stri_sub(t6[i,3],1,1)
temp_list$chunk <- stringi::stri_sub(mydf[i,3],
seq(2, stringi::stri_length(mydf[i,3]), by = 10),
length = 10)
my_list[[i]] <- temp_list
}
有没有办法使用 purrr::map 和 tidyr::unnest 之类的方法?
【问题讨论】:
标签: r dplyr data-manipulation tidyr purrr