我正在进行for循环,以计算错误后的速度减慢。基本上,如果参与者的试用不正确(key_resp_corr = 0
(,我想看看他们是否在下一次试用中放慢了速度(即,下一次试验的key_resp.rt减去当前试验的key.resp.rt。
以下是一些示例数据的代码(称为MixedRSI(:
structure(list(X = 25:35, display = c("HHHHH", "HHHHH", "HHHHH",
"SSSSS", "HHSHH", "SSSSS", "HHHHH", "SSHSS", "SSSSS", "HHHHH",
"SSSSS"), correctAns = c("z", "z", "z", "slash", "slash", "slash",
"z", "z", "slash", "z", "slash"), RSI = c(0.6, 1.4, 1.3, 0.8,
0.7, 0.8, 0.8, 0.6, 0.8, 1.2, 0.6), key = c("z", "z", "z", "slash",
"z", "slash", "z", "z", "slash", "z", "slash"), key_resp_corr = c(1L,
1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L), key_resp.rt = c(0.796000004,
1.430000067, 1.462999821, 0.946999788, 0.881000042, 1.263999939,
1.113000154, 0.812999964, 0.897000074, 1.364000082, 0.697000027
), Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Block = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Condition = c("Mixed",
"Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed",
"Mixed", "Mixed", "Mixed"), PES = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0)), row.names = 25:35, class = "data.frame")
以下是我尝试过的:
ntrials <- (nrow(MixedRSI)-1)
MixedRSI$PES <- 0
for (i in ntrials) {
MixedRSI$PES[i] <-
ifelse(
MixedRSI$key_resp_corr[i] == 0,
yes = (MixedRSI$key_resp.rt[i+1] - MixedRSI$key_resp.rt[i]),
no = MixedRSI$PES[i])
}
问题是,它没有在应该更新的时候用正确的值更新PES列——它只是让它为零。我很困惑,因为当我在i = 4
时单独运行ifelse语句时,它似乎工作得很好。我这里缺什么了吗?当i = 4
时,它是否以某种方式覆盖了我的条目?
这里没有循环:
check <- df$key_resp_corr == 0
diffs <- diff(df$key_resp.rt)
diffs <- c(diffs, 0)
newPES <- check * diffs
newPES <- ifelse(newPES > 0, 1, 0)
df$PES <- newPES
df
X display correctAns RSI key key_resp_corr key_resp.rt Subject Block Condition PES
25 25 HHHHH z 0.6 z 1 0.7960000 1 1 Mixed 0
26 26 HHHHH z 1.4 z 1 1.4300001 1 1 Mixed 0
27 27 HHHHH z 1.3 z 1 1.4629998 1 1 Mixed 0
28 28 SSSSS slash 0.8 slash 1 0.9469998 1 1 Mixed 0
29 29 HHSHH slash 0.7 z 0 0.8810000 1 1 Mixed 1
30 30 SSSSS slash 0.8 slash 1 1.2639999 1 1 Mixed 0
31 31 HHHHH z 0.8 z 1 1.1130002 1 1 Mixed 0
32 32 SSHSS z 0.6 z 1 0.8130000 1 1 Mixed 0
33 33 SSSSS slash 0.8 slash 1 0.8970001 1 1 Mixed 0
34 34 HHHHH z 1.2 z 1 1.3640001 1 1 Mixed 0
35 35 SSSSS slash 0.6 slash 1 0.6970000 1 1 Mixed 0
如果这不是你想要的,请回复。或者请抬头查看答案。
这里有一个dplyr
解决方案:
MixedRSI <- structure(list(X = 25:35,
display = c("HHHHH", "HHHHH", "HHHHH",
"SSSSS", "HHSHH", "SSSSS", "HHHHH", "SSHSS", "SSSSS", "HHHHH",
"SSSSS"), correctAns = c("z", "z", "z", "slash", "slash", "slash",
"z", "z", "slash", "z", "slash"), RSI = c(0.6, 1.4, 1.3, 0.8,
0.7, 0.8, 0.8, 0.6, 0.8, 1.2, 0.6), key = c("z", "z", "z", "slash",
"z", "slash", "z", "z", "slash", "z", "slash"), key_resp_corr = c(1L,
1L, 1L, 1L, 0L, 1L, 1L, 1L, 1L, 1L, 1L), key_resp.rt = c(0.796000004,
1.430000067, 1.462999821, 0.946999788, 0.881000042, 1.263999939,
1.113000154, 0.812999964, 0.897000074, 1.364000082, 0.697000027),
Subject = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Block = c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), Condition = c("Mixed",
"Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed", "Mixed",
"Mixed", "Mixed", "Mixed"), PES = c(0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0)), row.names = 25:35, class = "data.frame")
#dplyr solution
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
MixedRSI %>%
mutate(PES = case_when(
key_resp_corr == 0 ~ lag(key_resp.rt) - key_resp.rt,
T ~ 0
))
#> X display correctAns RSI key key_resp_corr key_resp.rt Subject Block
#> 1 25 HHHHH z 0.6 z 1 0.7960000 1 1
#> 2 26 HHHHH z 1.4 z 1 1.4300001 1 1
#> 3 27 HHHHH z 1.3 z 1 1.4629998 1 1
#> 4 28 SSSSS slash 0.8 slash 1 0.9469998 1 1
#> 5 29 HHSHH slash 0.7 z 0 0.8810000 1 1
#> 6 30 SSSSS slash 0.8 slash 1 1.2639999 1 1
#> 7 31 HHHHH z 0.8 z 1 1.1130002 1 1
#> 8 32 SSHSS z 0.6 z 1 0.8130000 1 1
#> 9 33 SSSSS slash 0.8 slash 1 0.8970001 1 1
#> 10 34 HHHHH z 1.2 z 1 1.3640001 1 1
#> 11 35 SSSSS slash 0.6 slash 1 0.6970000 1 1
#> Condition PES
#> 1 Mixed 0.00000000
#> 2 Mixed 0.00000000
#> 3 Mixed 0.00000000
#> 4 Mixed 0.00000000
#> 5 Mixed 0.06599975
#> 6 Mixed 0.00000000
#> 7 Mixed 0.00000000
#> 8 Mixed 0.00000000
#> 9 Mixed 0.00000000
#> 10 Mixed 0.00000000
#> 11 Mixed 0.00000000
由reprex包(v0.3.0(创建于2020-12-08