を行うことができます。
library(dplyr)
library(tidyr)
bill <- rep(c(1,1,2,3,3,3,3),5)
prod <- rep(c(123,176,189, 1,2,44,46),5)
df <- data.frame(bill=bill, prod=prod)
#determine max product count (number of columns in result)
prodmax <- df %>% group_by(bill) %>% summarise(n = n())
df %>% group_by(bill) %>%
mutate(prodn = paste0("prod",row_number())) %>%
spread(prodn, prod) %>%
#select columns in correct order
select_(.dots = c('bill',paste0('prod',seq(1,max(prodmax$n)))))
結果で:
bill prod1 prod2 prod3 prod4
(dbl) (dbl) (dbl) (dbl) (dbl)
1 1 123 176 NA NA
2 2 189 NA NA NA
3 3 1 2 44 46
ねえ@ Wietze314おかげで多くのことを...これは非常に速く、他のソリューションよりも結果を提供します..しかし、列は出力にはPROD1 prod10 prod11として注文されている...どのように私はやりますprod1 prod2 prod3に順序を変更する......列番号を手動で指定せずに – AB6
解決策を変更しました。列(デフォルトでアルファベット順に並べられている列)が正しい順序であることを確認する方法の1つです。もう1つの解決策は、列がアルファベット順に正しいことを確認することです(つまり、prod01、prod02、...、prod11など) – Wietze314