объединение нескольких строк в одну строку - PullRequest
0 голосов
/ 01 октября 2019

У меня есть несколько записей для каждого «customerID», и у каждой записи есть номер заказа, тип заказа и время заказа в столбцах «Номер», «Тип», «Время». Я хочу объединить несколько строк в одну строку по номеру заказа «Номер». для каждого клиента время заказа и номер заказа в порядке возрастания.

xxx <- data.frame(CustomerID = c(1,1,1,2,2,3,4,4,4,4,5), Number = c(1,2,3,1,2,1,1,2,3,4,1), type = c("ball", "pen", "compass", "ball", "eraser", "ball", "watch", "pen", "ball", "scale", "ball"), time = c(0.58, 1.23, 2.34, 2.11, 4.57, 0.58, 1.02, 3.23, 4.32, 5.45, 0.23) )

ожидаемый вывод

customerID  Number_1   Number_2 Number_3 Number_4   type_1   Type_2   type_3                                                                      
1                1           2         3       NA     ball     pen    compass
2                 1          2         NA      NA     ball     eraser  NA
3                1          NA         NA      NA     ball     NA      NA
time_1   time_2 time_3 time_4
```0.58    1.23    2.34    2.11
2.11       4.57     NA     NA
0.58       NA        NA    NA\

1 Ответ

3 голосов
/ 02 октября 2019

Мы могли бы использовать pivot_wider из tidyr

library(dplyr)
library(tidyr)
xxx %>%
   pivot_wider(values_from = c(Number, type, time), names_from =  Number)
# A tibble: 5 x 13
#  CustomerID Number_1 Number_2 Number_3 Number_4 type_1 type_2 type_3  type_4 time_1 time_2 time_3 time_4
#       <dbl>    <dbl>    <dbl>    <dbl>    <dbl> <fct>  <fct>  <fct>   <fct>   <dbl>  <dbl>  <dbl>  <dbl>
#1          1        1        2        3       NA ball   pen    compass <NA>    0.580   1.23   2.34  NA   
#2          2        1        2       NA       NA ball   eraser <NA>    <NA>    2.11    4.57  NA     NA   
#3          3        1       NA       NA       NA ball   <NA>   <NA>    <NA>    0.580  NA     NA     NA   
#4          4        1        2        3        4 watch  pen    ball    scale   1.02    3.23   4.32   5.45
#5          5        1       NA       NA       NA ball   <NA>   <NA>    <NA>    0.23   NA     NA     NA   

Если есть дубликаты для 'CustomerID' и 'Number', создайте столбец последовательности, сгруппированный по этим столбцам, а затем выполнитеpivot_wider

xxx %>% 
  group_by(CustomerID, Number) %>% 
  mutate(rn = row_number()) %>%
  pivot_wider(values_from = c(Number, type, time), names_from =  Number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...