R: Разблокировать столбец с датами - PullRequest
1 голос
/ 30 марта 2020

предположим, у меня есть следующий фрейм данных:

df <- data.frame(Order=c("1234567","1234567","1234567","456789","456789"),Stage=c("Pipeline","Proposal","Closed","Pipeline","Lost"),StageChange=c("2008-01-01","2008-01-02","2008-01-03","2008-01-10","2008-01-12"))

В результате:

    head(df)
    Order    Stage StageChange
1 1234567 Pipeline  2008-01-01
2 1234567 Proposal  2008-01-02
3 1234567   Closed  2008-01-03
4  456789 Pipeline  2008-01-10
5  456789     Lost  2008-01-12

Мне нужно снять столбец Stage и перейти к фрейму данных, например так:

    Order   Pipeline   Proposal     Closed       Lost
1 1234567 2008-01-01 2008-01-02 2008-01-03         NA
2  456789 2008-01-10         NA         NA 2008-01-12

Я прочитал документацию и попробовал разные подходы с помощью dplyr и tidyr ( как в этой теме ), но мое невежество побеждает.

Любые мысли о том, чтобы свершиться sh что мне нужно?

Моя цель, чтобы прояснить это, состоит в том, чтобы использовать эти данные для вычисления количества дней, которые конкретный Орден провел на определенной c Стадии. Некоторые ордера потеряны, другие закрыты (выиграны), поэтому существуют значения «NA». То же самое происходит, когда заказ не изменился до определенного c этапа (заказ может go от конвейера до потерянного, без каких-либо изменений на промежуточные этапы).

Спасибо!

Ответы [ 3 ]

2 голосов
/ 30 марта 2020

Вы можете использовать tidyr::pivot_wider. Это новая версия удаленной функции spread

# install.packages("tidyr")
library(tidyr)

df %>%
  pivot_wider(names_from = Stage, values_from = StageChange)

# # A tibble: 2 x 5
#   Order   Pipeline   Proposal   Closed     Lost      
#   <fct>   <fct>      <fct>      <fct>      <fct>     
# 1 1234567 2008-01-01 2008-01-02 2008-01-03 NA        
# 2 456789  2008-01-10 NA         NA         2008-01-12
1 голос
/ 30 марта 2020

Даты будут factor класс

library(tidyverse)

df_wide <- df %>%
  tidyr::pivot_wider(names_from = Stage, values_from = StageChange)
df_wide

# A tibble: 2 x 5
  Order   Pipeline   Proposal   Closed     Lost      
  <fct>   <fct>      <fct>      <fct>      <fct>     
1 1234567 2008-01-01 2008-01-02 2008-01-03 NA        
2 456789  2008-01-10 NA         NA         2008-01-12

В случае, если вы хотите конвертировать даты в Date класс

df_wide_dates <- df %>%
  tidyr::pivot_wider(names_from = Stage, values_from = StageChange) %>%
  dplyr::mutate_at(., vars(Pipeline, Proposal, Closed, Lost), as.Date)
df_wide_dates

# A tibble: 2 x 5
  Order   Pipeline   Proposal   Closed     Lost      
  <fct>   <date>     <date>     <date>     <date>    
1 1234567 2008-01-01 2008-01-02 2008-01-03 NA        
2 456789  2008-01-10 NA         NA         2008-01-12
0 голосов
/ 30 марта 2020

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

library(dplyr)

df %>% 
  spread(Stage,StageChange) %>% 
  select(Order,Pipeline,Proposal,Closed,Lost)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...