【发布时间】:2014-03-20 17:33:09
【问题描述】:
我有以下名为“EasyScaled”的数据框;
str(EasyScaled)
'data.frame': 675045 obs. of 3 variables:
$ Trial : chr "1_easy.wav" "1_easy.wav" "1_easy.wav" "1_easy.wav" ...
$ TrialTime : num 3000 3001 3002 3003 3004 ...
$ PupilBaseCorrect: num 0.784 0.781 0.78 0.778 0.777 ...
“TrialTime”数字变量表示每个数据点的时间(3000 = 3000ms、3001 = 3001 ms 等),“PupilBaseCorrect”是我的因变量,“Trial”变量指的是实验性试验。
我想创建一个新对象,首先将我的数据分为 3 个时间段(TimeBin1 = 3000-8000ms,TimeBin2 = 8001-13000ms,TimeBin3 = 13001 - 18000ms),然后计算每个时间段的平均值(每次试验),这样我最终会得到这样的东西(给出的值反映了“PupilBaseCorrect”);
Trial TimeBin1 TimeBin2 TimeBin3
1_easy 0.784 0.876 0.767
34_easy 0.781 0.872 0.765
35_easy 0.78 0.871 0.762
...etc ...etc ...etc ....etc
我曾尝试使用 cut()、ddply() 以及此博客 http://lamages.blogspot.co.uk/2012/01/say-it-in-r-with-by-apply-and-friends.html 上的一些建议,但未能找到正确的代码。我也试过这个;
EasyTimeBin <- aggregate(PupilBaseCorrect ~ Trial + TrialTime[3000:8000, 8001:1300,1301:1800], data=EasyScaled, mean)
但出现以下错误;
Error in TrialTime[3000:8000, 8001:1300, 1301:1800] :
incorrect number of dimensions
任何建议或意见将不胜感激。
【问题讨论】:
-
您想要
TrailTime[which(TrailTime %in% c(3000:8000,8001:1300,1301:1800))],或者利用aggregate中的subset参数 -
谢谢理查德,如果罗伯特下面的方法证明很棘手,我会试一试。