按主题编号合并行

时间:2014-07-18 14:49:22

标签: r merge rows reshape

我要做的是按行合并我的数据框。例如,假设我的data.frame被称为数据,它看起来像这样:我有5列 - 主题包含5s和6s,Phase包含Post-Lure和Pre-Lure,Type包含Visual和Auditory,Memory包含一个分数列表。例如:

      Subject     Phase        Type             Memory
1         5     Post-Lure     Visual          0.80000000
2         5     Post-Lure     Auditory        0.70666667
3         5     Pre-Lure      Visual          0.40000000
4         5     Pre-Lure      Auditory        0.61333333
5         6     Post-Lure     Visual          0.80000000
6         6     Post-Lure     Auditory        0.54666667

从上面的代码中可以看出,主题被重复(主题5是同一个人,但阶段和/或类型现在是不同的)。因此,我正在寻找一个代码,使每个主题的所有数据在同一行。因此,内存分数以及每个主题所暴露的不同类型和阶段现在将成为同一行上的附加列。我觉得聚合可以做到这一点但是可以使用该代码而无需对每个数字应用函数。任何帮助将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:0)

如评论中所述,您需要添加一个"指标"某种变量(例如,有多少"次"每个主题都有。)

可以使用aveseq_along

来完成
mydf$time <- with(mydf, ave(Subject, Subject, FUN=seq_along))

接下来,您可以使用reshape()从&#34; long&#34;到&#34;宽&#34;。

reshape(mydf, direction = "wide", 
        idvar="Subject", timevar="time")
#   Subject   Phase.1 Type.1 Memory.1   Phase.2   Type.2  Memory.2
# 1       5 Post-Lure Visual      0.8 Post-Lure Auditory 0.7066667
# 5       6 Post-Lure Visual      0.8 Post-Lure Auditory 0.5466667
#    Phase.3 Type.3 Memory.3  Phase.4   Type.4  Memory.4
# 1 Pre-Lure Visual      0.4 Pre-Lure Auditory 0.6133333
# 5     <NA>   <NA>       NA     <NA>     <NA>        NA

如果你想使用&#34; reshape2&#34;或者&#34; tidyr&#34;包,您首先必须将数据放入&#34; long&#34;使用meltgather表单,但请注意,在此过程中,您的变量类型将被转换,因为单个列将包含多种数据类型。

答案 1 :(得分:0)

您是否只想重塑数据?问题不明确。让我们调用您的数据框df。然后

library(reshape2)
dcast(df, Subject ~ Phase + Type)

将产生

  Subject Post-Lure_Auditory Post-Lure_Visual Pre-Lure_Auditory Pre-Lure_Visual
1       5          0.7066667              0.8         0.6133333             0.4
2       6          0.5466667              0.8                NA              NA