Добавление базового столбца в фрейм данных на основе вычисления другого столбца

У меня есть следующий фрейм данных, называемый "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)

0 ответов

Другие вопросы по тегам