Предполагая, что у вас всегда будет одно и то же значение в target.position
в каждом trial.numer
, мы можем group_by
trial.number
и рассчитать max(GY)
, если первое значение "вверх", или же вычислить min
.
library(dplyr)
example.df %>%
group_by(trial.number) %>%
summarise(pxpos = if_else(target.position[1] == "up", max(GY), min(GY)))
# trial.number pxpos
# <int> <dbl>
# 1 1 177
# 2 2 183
# 3 3 -142
# 4 4 -191
# 5 5 143
# 6 6 158
# 7 7 -162
# 8 8 -200
# 9 9 194
#10 10 113
Как указал @Axeman, if_else
медленный, вместо этого мы можем заменить его простым if
else
example.df %>%
group_by(trial.number) %>%
summarise(pxpos = if (target.position[1] == "up") max(GY) else min(GY))
данные
set.seed(123)
example.df <- data.frame(trial.number = rep(1:10, each = 10),
GY = sample(-200:200,100, replace = T),
target.position = rep(c("up","down","up","down",
"up"), each = 20))