我的数据不是按时间顺序生成的,但是,我希望计算参与者在所需时间范围内做出响应时的准确性。我的数据框看起来像这样(简单的示例)
a<-data.frame("time1"=c(6.28,17,49,72), "target"=c(5.8,17.3,71.5,85),"catch"=c(8,48.5,68,80))
我想知道time1
(主题响应时间)是否在target
时间+ 0.9的附加持续时间范围内发生,如果这样的话,精度为1。但是,time1
并非按正确的时间顺序排列,因为参与者也可能对catch
做出响应,在这种情况下,准确性为0。另一方面,参与者可能会正确回答,但不在target
的同一行中(例如:a$time1[4]
= 72是正确的回答,因为它位于正确的范围内:72.4({{1} }:71.5 + 0.9),但不在同一行。
这是预期的结果(第四栏):
a$target[3]
是否有任何建议通过浏览outcome<-data.frame("time1"=c(6.28,17,49,72), "target"=c(5.8,17.3,71.5,85),"catch"=c(8,48.5,68,80),
"expOutcome.ACC"=c(1,1,0,1))
和target
的两列来了解每个time1值是否正确回答?如果可以使用catch
/ tidyverse
包解决问题,将不胜感激。
非常感谢!
答案 0 :(得分:0)
library(tidyr)
library(dplyr)
a %>%
gather(key = event, value = time) %>%
arrange(time) %>%
mutate(acc = event == "time1" &
lag(event, default = "dummy") == "target" &
time <= lag(time, default = -Inf) + 0.9)
# event time acc
# 1 target 5.80 FALSE
# 2 time1 6.28 TRUE
# 3 catch 8.00 FALSE
# 4 time1 17.00 FALSE
# 5 target 17.30 FALSE
# 6 catch 48.50 FALSE
# 7 time1 49.00 FALSE
# 8 catch 68.00 FALSE
# 9 target 71.50 FALSE
# 10 time1 72.00 TRUE
# 11 catch 80.00 FALSE
# 12 target 85.00 FALSE