转置以获取 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
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