我有一个data.frame mydf
,其中包含来自27个科目的数据。有两个预测变量,congruent
(2个级别)和offset
(5个级别),因此总共有10个条件。在每种条件下对27名受试者中的每一名进行20次测试,导致总共10 * 27 * 20 = 5400次观察。 RT
是响应变量。结构如下所示:
> str(mydf)
'data.frame': 5400 obs. of 4 variables:
$ subject : Factor w/ 27 levels "1","2","3","5",..: 1 1 1 1 1 1 1 1 1 1 ...
$ congruent: logi TRUE FALSE FALSE TRUE FALSE TRUE ...
$ offset : Ord.factor w/ 5 levels "1"<"2"<"3"<"4"<..: 5 5 1 2 5 5 2 2 3 5 ...
$ RT : int 330 343 457 436 302 311 595 330 338 374 ...
我使用daply()
计算了10个条件中每个主题的mean
RT:
myarray <- daply(mydf, .(subject, congruent, offset), summarize, mean = mean(RT))
结果看起来就像我想要的那样,即一个3d数组;可以说5个表格(每个offset
条件一个表格),显示congruent=FALSE
与congruent=TRUE
条件中每个主题的平均值。
但是,如果我检查myarray
的结构,我会得到一个令人困惑的输出:
List of 270
$ : num 417
$ : num 393
$ : num 364
$ : num 399
$ : num 374
...
# and so on
...
[list output truncated]
- attr(*, "dim")= int [1:3] 27 2 5
- attr(*, "dimnames")=List of 3
..$ subject : chr [1:27] "1" "2" "3" "5" ...
..$ congruent: chr [1:2] "FALSE" "TRUE"
..$ offset : chr [1:5] "1" "2" "3" "4" ...
这与ozone
包中的原型plyr
数组的结构完全不同,即使它是一种非常相似的格式(3维,只有数值)。
我想通过aaply
计算一些有关此数组的进一步摘要信息。 确切地说,我想计算每个主题和偏移的一致和不一致方法之间的差异。
但是,已经 aaply()
的最基本的应用 aaply(myarray,2,mean)
会返回无意义的输出: < / p>
FALSE TRUE
NA NA
Warning messages:
1: In mean.default(piece, ...) :
argument is not numeric or logical: returning NA
2: In mean.default(piece, ...) :
argument is not numeric or logical: returning NA
我不知道为什么daply()
函数会返回如此奇怪的结构化输出,从而阻止aaply
的进一步使用。我非常感谢任何形式的帮助,我坦率地承认我对plyr
包几乎没有任何经验。
答案 0 :(得分:1)
由于您没有包含您的数据,因此很难确定,但我尝试将您的数据设置为str()
。您可以使用ddply
的两种用途来做您想要的(我猜)。首先是手段,然后是手段的差异。
#Make dummy data
mydf <- data.frame(subject = rep(1:5, each = 150),
congruent = rep(c(TRUE, FALSE), each = 75),
offset = rep(1:5, each = 15), RT = sample(300:500, 750, replace = T))
#Make means
mydf.mean <- ddply(mydf, .(subject, congruent, offset), summarise, mean.RT = mean(RT))
#Calculate difference between congruent and incongruent
mydf.diff <- ddply(mydf.mean, .(subject, offset), summarise, diff.mean = diff(mean.RT))
head(mydf.diff)
# subject offset diff.mean
# 1 1 1 39.133333
# 2 1 2 9.200000
# 3 1 3 20.933333
# 4 1 4 -1.533333
# 5 1 5 -34.266667
# 6 2 1 -2.800000