转置为R

时间:2016-04-17 04:11:20

标签: r transpose

EID   Year Performance_rating
E100  2013                  4
E100  2014                  1
E200  2012                  4
E200  2013                  5
E200  2014                  2
E200  2015                  4

我需要用于建模目的的数据的方式是非重复的EID,每年的性能等级在不同的列中(注意一些有2年的数据,有些3和4有4个基于加入日期)

EID Performance_rating_2012 Performance_rating_2013 Performance_rating_2014 Performance_rating_2015
E100                     NA                       4                       1                      NA
E200                      4                       5                       2                       4 

我尝试了多种方法来解决这个问题但是失败了所以发布在这里,任何答案都会非常感激

2 个答案:

答案 0 :(得分:3)

tidyr具有此情况和其他所需的确切解决方案:

library(tidyr)
df %>% spread(Year, Performance_rating)

结果输出是宽数据框:

   EID 2012 2013 2014 2015
1 E100   NA    4    1   NA
2 E200    4    5    2    4

答案 1 :(得分:2)

我们可以使用dcast

library(reshape2)
dcast(df1, EID~ paste0("Performance_rating_", Year), value.var="Performance_rating")
#  EID Performance_rating_2012 Performance_rating_2013 Performance_rating_2014 Performance_rating_2015
#1 E100                      NA                       4                       1                      NA
#2 E200                       4                       5                       2                       4