-1

I have the following data frame:

Application Type    Value   Date
     X       A      323   15/04/2017
     X       B     65306  15/04/2017
     Y       A      454   15/04/2017
     X       C     53734  16/04/2017
     Y       A      208   16/04/2017
     Y       B     46689  16/04/2017
     X       B    1399283 17/04/2017

How can I convert row data into column, like this:

Application Type    15/04/2017  16/04/2017  17/04/2017
     X        A        323      
     X        B       65306     
     X        C                   53734 
     Y        A        454         208  
     Y        B                   46689 
     X        B                              1399283

Thanks!

Vitor Quix
  • 164
  • 1
  • 9

1 Answers1

0

We can use dcast with drop = FALSE

library(data.table)
dcast(setDT(df1), Application + Type ~Date, value.var = "Value", drop = FALSE)
#   Application Type 15/04/2017 16/04/2017 17/04/2017
#1:           X    A        323         NA         NA
#2:           X    B      65306         NA    1399283
#3:           X    C         NA      53734         NA
#4:           Y    A        454        208         NA
#5:           Y    B         NA      46689         NA
#6:           Y    C         NA         NA         NA

Or with tidyverse

library(tidyverse)
df1 %>%
    spread(Date, Value, drop = FALSE)
akrun
  • 874,273
  • 37
  • 540
  • 662