基于另一列的计算将基线列添加到数据框

时间:2014-10-12 10:37:29

标签: r dataframe calculated-columns baseline

我有以下数据框,称为“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)

0 个答案:

没有答案