Как реструктурировать данные о поездках, чтобы подготовить данные связи с помощью функций распространения и сбора в R? - PullRequest
1 голос
/ 06 мая 2020
• 1000 1004 *
df_new <- data.frame(user=c("P001", "P002"), tripID = c("newtid1", "newtid2"), mode = c("bus + train", "taxi"), Origin = c("Westmead", "Westmead" ), Destination = c("Darlington", "Strathfield"), depart_dt = c("8:00", "8:45"))

Я новенькая пчела в Р. Кто-нибудь может мне помочь?

Заранее большое спасибо.

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вам не нужно использовать spread() или gather() (или их преемников pivot_longer. и pivot_wider(). Приведенное ниже должно дать вам то, что вы хотите.

library(tidyverse)

df %>% 
  group_by(user) %>% 
  arrange(tripID, .by_group = TRUE) %>% 
  summarise(mode = str_c(mode, collapse = " + "),
            Origin = first(Origin),
            Destination = last(Destination),
            depart_dt = first(depart_dt)) %>% 
  mutate(tripID = str_c("newtrid", row_number()))

#   user  mode        Origin   Destination depart_dt tripID  
#   <fct> <chr>       <fct>    <fct>       <fct>     <chr>   
# 1 P001  bus + train Westmead Darlington  8:00      newtrid1
# 2 P002  taxi        Westmead Strathfield 8:45      newtrid2
1 голос
/ 06 мая 2020

Использование dplyr:

library(dplyr)

df <- data.frame(user =c("P001", "P001", "P002"), tripID = c("tid1", "tid2", "tid3"), mode =c("bus", "train", "taxi"), Origin = c("Westmead", "Redfan", "Westmead"), Destination = c("Redfan", "Darlington", "Strathfield"), depart_dt = c("8:00", "8:30", "8:45") )

df %>%
  group_by(user) %>%
  arrange(depart_dt, .by_group = TRUE) %>%
  summarize(Origin = Origin[1], mode = paste(mode, collapse = " + "),
            Destination = Destination[length(Destination)],
            depart_dt = depart_dt[1]) %>%
  mutate(tripID = paste0("newtid", row_number()))
#> # A tibble: 2 x 6
#>   user  Origin   mode        Destination depart_dt tripID 
#>   <fct> <fct>    <chr>       <fct>       <fct>     <chr>  
#> 1 P001  Westmead bus + train Darlington  8:00      newtid1
#> 2 P002  Westmead taxi        Strathfield 8:45      newtid2

Создано 06.05.2020 с помощью пакета REPEX (v0.3.0)

...