我试图找到参与者连续达到 8 个连续响应的点。数据来自类别学习任务,因此变量如下所示:
R> data
[1] 1 1 1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 1 1..
我正在尝试查找参与者达到我们的学习标准的试验编号 - 连续 8 个正确答案(1 代表正确答案)。所以我想从上面的例子中返回 18,因为在第 18 次试验中,参与者连续做出了 8 个正确答案。
很抱歉,如果这个问题已在其他地方得到回答。我环顾四周,发现了一些类似的问题,但我无法弄清楚如何直接应用于我的问题。我今天刚刚开始使用 R(从 SPSS 切换),所以我仍在学习。
提前致谢!如果我需要提供更多详细信息,请告诉我。
最佳答案
设置
x <- c(1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
这里有两种方法:
1) 嵌入。使用 embed
查找第一行 1,如下所示:
> which(rowSums(embed(x, 8)) == 8)[1] + 8 - 1
[1] 18
2) 滚动应用。有了动物园包就没有那么棘手了。这样我们就可以对最后 8 个值进行滚动求和,然后找到它第一次变为 8 的时间:
> library(zoo)
> r <- rollapply(zoo(x), 8, sum, align = "right")
> time(r[r == 8][1])
[1] 18
关于r - 找到 x 连续响应的点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5446240/