-2

I have following data frame df

ID Year Var value
1  2011  x1  1.2
1  2011  x2  2
1  2012  x1  1.5
1  2012  x2  2.3
3  2013  x1  3
3  2014  x1  4
4  2015  x1  5
5  2016  x1  6
4  2016  x1  2

I want to transform the data in following format

ID Year  x1  x2 
1  2011  1.2 2
1  2011  2   NA  
1  2012  1.5 2.3
3  2013  3   NA
3  2014  4   4
4  2015  5   NA
4  2016  2   NA
5  2016  6   NA

Please help

  • Possible duplicate of [How to reshape data from long to wide format?](https://stackoverflow.com/questions/5890584/how-to-reshape-data-from-long-to-wide-format) – Uwe Aug 14 '17 at 16:35

1 Answers1

3

Using the tidyr library, I believe this is what you are looking for:

library(tidyr)

df <- data.frame(stringsAsFactors=FALSE,
          ID = c(1L, 1L, 1L, 1L, 3L, 3L, 4L, 5L, 4L),
        Year = c(2011L, 2011L, 2012L, 2012L, 2013L, 2014L, 2015L, 2016L, 2016L),
         Var = c("x1", "x2", "x1", "x2", "x1", "x1", "x1", "x1", "x1"),
       value = c(1.2, 2, 1.5, 2.3, 3, 4, 5, 6, 2)
)

df2 <- df %>% 
  spread(Var, value)
roarkz
  • 811
  • 10
  • 22