Если у ваших данных есть свойство, что каждый бегун наблюдает один раз каждым рекордером, и ваш фрейм данных сортируется по runner_id (оба из которых верны в вашем примере), то вот возможный подход base
R:
df <- data.frame(
runner_id = rep(1:5, each = 2),
recorder = rep(c("jack", "jane"), times = 5),
run_time_one = c(2, 2, 1, 2, 3, 3, 2, 2, 2, 2),
run_time_two = c(2, 2, 3, 3, 2, 1, 3, 3, 1, 1),
run_time_three = c(1, 1, 2, 2, 1, 1, 3, 2, 1, 1)
) # recreate the data set
flags <- df[df$recorder == "jack", 3:5] != df[df$recorder == "jane", 3:5]
# create data frame with binary indicator of disagreement between recorders
flags <- data.frame(runner_id = df[df$recorder == "jack", ]$runner_id, flags)
# glue runner id back onto flags column
flags[rowSums(flags[2:4, ]) > 0, ]
# display subset of data frame with any disagreements
Если это могло быть так, что Джейк и Джейн наблюдали разные наборы бегунов (например, Джек был единственным наблюдателем за бегуном 6), тогда, пожалуйста, дайте мне знать, что вместе с тем, как бы вы хотели эту ситуацию разрешено на выходе.