我要做的是按行合并我的数据框。例如,假设我的数据框架被称为data,它看起来是这样的:我有5列——主题包含5分和6分,阶段包含引诱后和引诱前,类型包含视觉和听觉,记忆包含分数列表。例:
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是同一个人,但是阶段和/或类型现在不同了)。因此,我正在寻找一个代码,将使所有的数据为每个主题在同一行。因此,记忆分数以及每个受试者所接触到的不同类型和阶段现在将成为同一行的附加列。我觉得聚合可能会有效果,但是否可以使用该代码而不对每个数字应用函数呢?任何帮助都将非常感激。谢谢你! 正如评论中提到的,您需要添加某种类型的"指示器"变量(例如,每个主题有多少"times")。
可以用ave
和seq_along
来完成:
mydf$time <- with(mydf, ave(Subject, Subject, FUN=seq_along))
接下来,你可以使用reshape()
从"长"到"宽"。
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
如果您想使用"reshape2"或"tidyr"包,您首先必须使用melt
或gather
将数据转换为"长"形式,但请注意,在此过程中,您的变量类型将被转换,因为单列将包含多个数据类型。
你只是想重塑你的数据吗?这个问题不清楚。我们将数据框命名为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