转置以获取 R 中每个 ID 的单行

Transposing to get single row for each ID's in R

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 年,基于加入日期)

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

我尝试了多种方法解决这个问题,但都失败了,所以在这里发帖,任何答案将不胜感激

我们可以使用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

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