unnest - "Unnesting" a dataframe in R -


i have following data.frame:

df <- data.frame(id=c(1,2,3),                   first.date=as.date(c("2014-01-01", "2014-03-01", "2014-06-01")),                   second.date=as.date(c("2015-01-01", "2015-03-01", "2015-06-1")),                  third.date=as.date(c("2016-01-01", "2017-03-01", "2018-06-1")),                  fourth.date=as.date(c("2017-01-01", "2018-03-01", "2019-06-1")))  > df    id first.date second.date third.date fourth.date 1  1 2014-01-01  2015-01-01 2016-01-01  2017-01-01 2  2 2014-03-01  2015-03-01 2017-03-01  2018-03-01 3  3 2014-06-01  2015-06-01 2018-06-01  2019-06-01 

each row represents 3 timespans; i.e. time spans between first.date , second.date, second.date , third.date, , third.date , fourth.date respectively.

i to, in lack of better word, unnest dataframe obtain instead:

  id  startdate    enddate 1  1 2014-01-01 2015-01-01 2  1 2015-01-01 2016-01-01 3  1 2016-01-01 2017-01-01 4  2 2014-03-01 2015-03-01 5  2 2015-03-01 2017-03-01 6  2 2017-03-01 2018-03-01 7  3 2014-06-01 2015-06-01 8  3 2015-06-01 2018-06-01 9  3 2018-06-01 2019-06-01 

i have been playing around unnest function tidyr package, came conclusion don't think it's i'm looking for.

any suggestions?

you can try tidyr/dplyr follows:

library(tidyr) library(dplyr) df %>% gather(datetype, startdate, -id) %>% select(-datetype) %>% arrange(id) %>% group_by(id) %>% mutate(enddate = lead(startdate)) 

you can eliminate last row in each id group adding:

%>% slice(-4) 

to above pipeline.


Comments

Popular posts from this blog

ruby - Trying to change last to "x"s to 23 -

jquery - Clone last and append item to closest class -

c - Unrecognised emulation mode: elf_i386 on MinGW32 -