R 根据之前的连续试验计算平均值

R 根据之前的连续试验计算平均值,r,R,我想计算每个SACCADIC\u RT的平均值,对于每个COMMISSION\u ERROR=1,每个ID每种情况,每连续5次HITS=1 ID | TRIAL | TRIAL_TYPE| CONDITION | COMMISSION_ERROR | HITS| SACCADIC_RT 1 183 nogo square_1 1 -1 175 1 54 go square_1

我想计算每个
SACCADIC\u RT
的平均值,对于每个
COMMISSION\u ERROR=1
,每个
ID
每种情况,每连续5次
HITS=1

ID  | TRIAL | TRIAL_TYPE| CONDITION | COMMISSION_ERROR  | HITS| SACCADIC_RT
1     183     nogo        square_1     1                  -1    175
1     54      go          square_1    -1                   1    259
1     26      nogo        square_1     1                  -1    365
1     3       nogo        square_1     1                  -1    346
1     100     nogo        square_1     1                  -1    287
1     11      go          square_1    -1                   1    164
1     52      go          square_1    -1                   1    244
1     8       go          square_1    -1                   1    223 
1     10      go          square_1    -1                   1    183
1     21      go          square_1    -1                   1    234
1     32      go          square_1     1                  -1    221
1     2       go          square_1    -1                   1    183
1    13       nogo        square_1     0                  -1    -1
1    87       nogo        square_2     1                  -1    228
1    95       nogo        square_2     1                  -1    274
1    111      go          square_2    -1                   1    305
1    28       nogo        square_2     0                  -1    309
1    65       go          square_2    -1                   0    -1
1    40       nogo        square_1     0                  -1    199
1    19       nogo        square_1     0                  -1    207
1    28       go          square_1    -1                   1    257
2    45       nogo        square_1     1                  -1    169
2    197      nogo        square_1     1                  -1    350
2    115      nogo        square_1     1                  -1    321
2    65       go          square_2    -1                   1    298
2    24       go          square_2    -1                   0    -1
2    1        nogo        square_2     1                  -1    183
2    77       go          square_2    -1                   1    225
2    90       go          square_2    -1                   1    305
2    89       go          square_2    -1                   1    210
2    104      go          square_2    -1                   1    199
2    116      go          square_2    -1                   1    175
2    29       nogo        square_2     1                  -1    99
2    41       go          square_2    -1                   1    104
示例表可以在r中重新创建为:

structure(list(ID = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                              1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 
                              2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), X..TRIAL.. = c(183L, 54L, 26L, 
                                                                              3L, 100L, 11L, 52L, 8L, 10L, 21L, 32L, 2L, 13L, 87L, 95L, 111L, 
                                                                              28L, 65L, 40L, 19L, 28L, 45L, 197L, 115L, 65L, 24L, 1L, 77L, 
                                                                              90L, 89L, 104L, 116L, 29L, 41L), TRIAL_TYPE. = structure(c(2L, 
                                                                                                                                         1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 1L, 2L, 
                                                                                                                                         1L, 2L, 2L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L, 
                                                                                                                                         1L), .Label = c("go", "nogo"), class = "factor"), CONDITION = structure(c(1L, 
                                                                                                                                                                                                                   1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                                                                   2L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                                                                                                                                                                                                   2L), .Label = c("square_1", "square_2"), class = "factor"), X..COMMISSION_ERROR = c(1L, 
                                                                                                                                                                                                                                                                                                       -1L, 1L, 1L, 1L, -1L, -1L, -1L, -1L, -1L, 1L, -1L, 0L, 1L, 1L, 
                                                                                                                                                                                                                                                                                                       -1L, 0L, -1L, 0L, 0L, -1L, 1L, 1L, 1L, -1L, -1L, 1L, -1L, -1L, 
                                                                                                                                                                                                                                                                                                       -1L, -1L, -1L, 1L, -1L), X..HITS. = c(-1L, 1L, -1L, -1L, -1L, 
                                                                                                                                                                                                                                                                                                                                             1L, 1L, 1L, 1L, 1L, -1L, 1L, -1L, -1L, -1L, 1L, -1L, 0L, -1L, 
                                                                                                                                                                                                                                                                                                                                             -1L, 1L, -1L, -1L, -1L, 1L, 0L, -1L, 1L, 1L, 1L, 1L, 1L, -1L, 
                                                                                                                                                                                                                                                                                                                                             1L), SACCADIC_RT = c(175L, 259L, 365L, 346L, 287L, 164L, 244L, 
                                                                                                                                                                                                                                                                                                                                                                  223L, 183L, 234L, 221L, 183L, -1L, 228L, 274L, 305L, 309L, -1L, 
                                                                                                                                                                                                                                                                                                                                                                  199L, 207L, 257L, 169L, 350L, 321L, 298L, -1L, 183L, 225L, 305L, 
                                                                                                                                                                                                                                                                                                                                                                  210L, 199L, 175L, 99L, 104L)), .Names = c("ID", "X..TRIAL..", 
                                                                                                                                                                                                                                                                                                                                                                                                            "TRIAL_TYPE.", "CONDITION", "X..COMMISSION_ERROR", "X..HITS.", 
                                                                                                                                                                                                                                                                                                                                                                                                            "SACCADIC_RT"), class = "data.frame", row.names = c(NA, -34L))
因此,本例的结果如下:

ID | CONDITION |  x
1    square_1    221
2    square_2    99

您可以使用package data.table执行此任务

步骤如下:

1) 对于每个ID和条件,计算点击的滚动总和

2) 只取满足2个条件的行:上一行的Commission\u error=1,滚动和列中有数字5

3) 计算步骤2中创建的表格中每个ID和条件的平均值

# load your data
data <- read.csv("./yourData.csv")

# load data table library
library(data.table)

# convert your data to data.table object
data <- data.table(data)

# group data by ID and Condition, calculate rolling sum over 5 rows
data[, roll := Reduce('+', shift(HITS, 0:4)), by = list(ID, CONDITION)]

# take only rows where there were 5 hits in a row and commission error is 1
newData <- data[shift(roll, 1) == 5 & COMMISSION_ERROR == 1]

# calculate mean of SACCADIC_RT for each ID and Condition in the new dataset
newData[, meanSacc := mean(SACCADIC_RT), by = list(ID, CONDITION)]
#加载数据

数据到目前为止,你的尝试在哪里?到目前为止,我只尝试了问题的第二点,即计算每种情况下每ID的试验佣金误差=1的扫视平均值,代码为:CE,谢谢@ira,但是,在连续5次点击之后的下一行中,需要满足COMMISSION_ERROR==1(点击==1)。这里的结果给出了0个观察值。在我的例子中,它是有效的。您是否尝试在最后一行之后调用newData?我只是更新了数据集中的值,没有打印结果。嗨,我这么做是的,但是当我应用更大的数据集时,它似乎不起作用。我知道HITS列包括5个连续行的滚动和,但我不确定“滚动”列包括什么。由于我对代码中使用的函数(如Reduce和shift)不太熟悉,请您解释一下代码中使用的函数好吗@Ath您能告诉我在您的情况下哪一行失败了吗?另外,请检查我编辑答案的
代码解释部分。您好,我正在尝试计算一个佣金错误
(佣金错误==1)之前连续5次点击的平均值
(扫视)
。但是,上述代码的
newData
仅包括
COMMISSION\u ERROR==1
。你知道如何提取之前的连续点击吗?谢谢@爱尔兰共和军