соответствовать определенному значению, которое не находится в той же строке и столбце - PullRequest
0 голосов
/ 26 декабря 2018

Мои данные не генерируются в хронологическом порядке, однако я хочу вычислить точность, когда участник отвечает в желаемом диапазоне времени.мой фрейм данных выглядит так (простой пример)

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 (a$target[3]: 71,5 + 0,9)но не в той же строке.

Вот ожидаемый результат (4-й столбец):

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))

Любой совет, чтобы узнать, правильно ли дан ответ на каждое значение time1, просматривая два столбца target и catch? Будем весьма признательны, если сможете использовать пакет tidyverse / purr для решения проблемы.

Большое спасибо!

1 Ответ

0 голосов
/ 28 декабря 2018
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...