通过IDnumber转置R中的数据

时间:2014-08-22 16:02:30

标签: r reshape

我有一个在R中转置数据的问题。基本上我正在寻找一个替代方法,通过id前缀=测试和proc转换,通过id前缀=得分在R中进行转置。 所以我有一组数据如下所示

ID  test date   score
1   4/1/2001    98
1   5/9/2001    65
1   5/23/2001   85
2   3/21/2001   76
2   4/8/2001    58
2   5/22/2001   67
2   6/15/2001   53
3   1/15/2001   46
3   5/30/2001   55
4   1/8/2001    71
4   2/14/2001   95
4   7/15/2001   93

我希望将其转换为:

id  test date1  score1  test date2  score2  testdate3   score3  testdate4   score4
1   4/1/2000    98      5/9/2001    65      5/23/2001   85  .   
2   3/21/2001   76      4/8/2001    58      5/22/2001   67      6/15/2001   53
3   1/15/2001   46      5/30/2001   55      .       .   
4   1/8/2001    71      2/14/2001   95      7/15/2001   93  .   

1 个答案:

答案 0 :(得分:1)

这是一个基本的"长"到"宽"重塑任务。在基数R中,您可以使用reshape,但只能在添加"时间"变量,像这样:

mydf$time <- with(mydf, ave(ID, ID, FUN = seq_along))
reshape(mydf, direction = "wide", idvar = "ID", timevar = "time")
#    ID test.date.1 score.1 test.date.2 score.2 test.date.3 score.3
# 1   1    4/1/2001      98    5/9/2001      65   5/23/2001      85
# 4   2   3/21/2001      76    4/8/2001      58   5/22/2001      67
# 8   3   1/15/2001      46   5/30/2001      55        <NA>      NA
# 10  4    1/8/2001      71   2/14/2001      95   7/15/2001      93
#    test.date.4 score.4
# 1         <NA>      NA
# 4    6/15/2001      53
# 8         <NA>      NA
# 10        <NA>      NA