如何准备我的数据以进行因子重复测量分析?

时间:2013-11-26 13:11:16

标签: r reshape glm reshape2

目前,我的数据框架是宽格式的,我想做一个因子重复测量分析,主题因素(性别和组织)和主体因素(任务类型)之间有两个。下面我已经说明了我的数据如何看样(实际的数据集有更多的变量)。以“1_”和“2_”开头的变量分别属于任务1和任务2期间的测量。这意味着 1_FD_H_org 2_FD_H_org 是相同的测量值,但分别用于任务1和2。

id  sex  org  task1     task2  1_FD_H_org  1_FD_H_text  2_FD_H_org  2_FD_H_text  1_apv  2_apv
2   F    T    Correct   2      69.97       68.9         116.12      296.02       10     27
6   M    T    Correct   2      53.08       107.91       73.73       333.15       16     21
7   M    T    Correct   2      13.82       30.9         31.8        78.07        4      9
8   M    T    Correct   2      42.96       50.01        88.81       302.07       4      24
9   F    H    Correct   3      60.35       102.9        39.81       96.6         15     10
10  F    T    Incorrect 3      78.61       80.42        55.16       117.57       20     17

我想分析两个任务之间是否存在差异,例如: FD_H_org适用于不同的群体/条件(性别和组织)。

如何重塑我的数据,以便我可以用这样的模型进行分析?
ezANOVA(data=df, dv=.(FD_H_org), wid=.(id), between=.(sex, org), within=.(task))

我认为我的数据的正确格式应该是这样的:

id  sex  org  task  outcome   FD_H_org   FD_H_text  apv
2   F    T    1     Correct   69.97      68.9       10
2   F    T    2     2         116.12     296.02     27
6   M    T    1     Correct   53.08      107.91     16
6   M    T    2     2         73.73      333.15     21

但我不确定。我试图用reshape2包来实现这个目标,但无法弄清楚如何做到这一点。有谁可以提供帮助吗?

1 个答案:

答案 0 :(得分:1)

我想你可能需要通过将2个列的子集与rbind()绑定来重建它。这里唯一的问题是你的结果暗示了不同的数据类型,所以强迫他们两个文本:

require(plyr)
dt<-read.table(file="dt.txt",header=TRUE,sep=" ") # this was to bring in your data

newtab=rbind(
  ddply(dt,.(id,sex,org),summarize, task=1, outcome=as.character(task1), FD_H_org=X1_FD_H_org, FD_H_text=X1_FD_H_text, apv=X1_apv),
  ddply(dt,.(id,sex,org),summarize, task=2, outcome=as.character(task2), FD_H_org=X2_FD_H_org, FD_H_text=X2_FD_H_text, apv=X2_apv)
)

newtab[order(newtab$id),]

     id sex org task   outcome FD_H_org FD_H_text apv
  1   2   F   T    1   Correct    69.97     68.90  10
  7   2   F   T    2         2   116.12    296.02  27
  2   6   M   T    1   Correct    53.08    107.91  16
  8   6   M   T    2         2    73.73    333.15  21
  3   7   M   T    1   Correct    13.82     30.90   4
  9   7   M   T    2         2    31.80     78.07   9
  4   8   M   T    1   Correct    42.96     50.01   4
  10  8   M   T    2         2    88.81    302.07  24
  5   9   F   H    1   Correct    60.35    102.90  15
  11  9   F   H    2         3    39.81     96.60  10
  6  10   F   T    1 Incorrect    78.61     80.42  20
  12 10   F   T    2         3    55.16    117.57  17

编辑 - 显然你不需要plyr(它可能会减慢它),除非你正在进行进一步的转换。这是没有非标准依赖项的代码:

  newcolnames<-c("id","sex","org","task","outcome","FD_H_org","FD_H_text","apv")
  t1<-dt[,c(1,2,3,3,4,6,8,10)]
  t1$org.1<-1
  colnames(t1)<-newcolnames
  t2<-dt[,c(1,2,3,3,5,7,9,11)]
  t2$org.1<-2
  t2$task2<-as.character(t2$task2)
  colnames(t2)<-newcolnames
  newt<-rbind(t1,t2)
  newt[order(newt$id),]