我有以下数据框,称为“EasyReshaped”。它是较大数据集的子集(TrialTime = 7000-15000)。
TrialTime Trial PupilSize MovingAverage
Min. : 7001 Length:232000 Min. : 191 Min. : 194.6
1st Qu.: 9001 Class :character 1st Qu.:1587 1st Qu.:1586.8
Median :11000 Mode :character Median :1695 Median :1694.8
Mean :11000 Mean :1672 Mean :1671.9
3rd Qu.:13000 3rd Qu.:1797 3rd Qu.:1797.2
Max. :15000 Max. :2389 Max. :2387.4
我想为每个'试验'添加一个新的专栏,其中'Trialtime'的平均值为'MovingAverage',而且只有'试验'9000-10000(总共有30个试验)。
我尝试过使用此代码
EasyReshaped$Baseline <- with(EasyReshaped, ave(MovingAverage, Trial, findInterval(TrialTime, c(9000:10000)), FUN= mean))
但是,由于某些原因,当我更改原始子集以包括TrialTime&lt;时,添加到我的数据框的基线值会有所不同。 18000(而不是TrialTime&lt; 15000)。
根据我对我使用的代码行的理解,这不应该发生 - 因为我只在TrialTime 9000:10000上运行计算。换句话说,无论子集数据帧的长度如何,我都应该获得相同的“基线”值。
关于为什么我可能遇到这个问题的任何想法?是否有更适合的替代代码行?
尝试了可重复的例子(遵循Akrun的要求)
df <- structure(list(TrialTime = c(1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6), Trial = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,4), PupilSize = c(3,9,8,4,6,7,21,22,30,1,2,7,6,19,19,17,19,20,21,7,22,12,12,4)), .Names = c("TrialTime", "Trial", "PupilSize"), row.names = c(NA,-24L), class = "data.frame")
df5$Baseline <- with(df5, ave(PupilSize, Trial, findInterval(TrialTime, c(2:3)), FUN= mean))
现在似乎没有做我想做的事情。这是输出
row.names TrialTime Trial PupilSize Baseline
1 1 1 3 3.0
2 2 1 9 9.0
3 3 1 8 6.0
4 4 1 4 6.0
7 1 2 21 21.0
8 2 2 22 22.0
9 3 2 30 15.5
10 4 2 1 15.5
依旧......
所以它似乎是平均试验时间3:4,而不是2:3。所以我希望它看起来像这个
row.names TrialTime Trial PupilSize Baseline
1 1 1 3 8.5
2 2 1 9 8.5
3 3 1 8 8.5
4 4 1 4 8.5
7 1 2 21 26
8 2 2 22 26
9 3 2 30 26
10 4 2 1 26
依旧.....
知道这是什么我做错了吗?感谢
**对不起我应该补充一点,'df5'是df的子集版本(TrialTime&lt; 5)