Добавление базового столбца в фрейм данных на основе вычисления другого столбца
У меня есть следующий фрейм данных, называемый "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
Я хотел бы добавить новый столбец со средним значением "MovingAverage" из "Trialtime" 9000-10000 только для каждого "Trial" (всего 30 испытаний).
Я пытался использовать этот код
EasyReshaped$Baseline <- with(EasyReshaped, ave(MovingAverage, Trial, findInterval(TrialTime, c(9000:10000)), FUN= mean))
Однако по какой-то причине базовые значения, добавленные в мой фрейм данных, отличаются, когда я изменяю исходное подмножество, чтобы включить TrialTime < 18000 (в отличие от TrialTime <15000).
Из моего понимания строки кода, которую я использовал, этого не должно произойти - поскольку я только выполняю вычисления по TrialTime 9000:10000. Другими словами, я должен получить одно и то же "базовое" значение независимо от длины моего заданного фрейма данных.
Любые идеи относительно того, почему я мог столкнуться с этой проблемой? Есть ли альтернативная строка кода, которая была бы лучше подходит?
Попытка воспроизводимого примера (по запросу Акруна)
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
и так далее....
Таким образом, кажется, что усреднение TrialTimes 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 <5)