В моем наборе данных панели у меня нет времени, необходимого для конкретной деятельности, а только время начала действия.Вот почему мне нужно сделать сумму из различий между обервацией после действия и фактическим наблюдением.
Вот почему я сейчас хочу создать новую переменную в моем наборе данных панели, которая задает разницу в переменноймежду одним обервацией и следующим.Это становится понятнее с примером набора данных:
Пример набора данных:
game_data <- data.frame(player = c(1,1,1,1,2,2,2,2), level = c(1,1,2,2,1,1,2,2), activity = c("run","run","run","swim","swim","run","run","swim"), datesec = c(0,150,170,240,100,110,180,330))
> game_data
player level activity datesec
1 1 1 run 0
2 1 1 run 150
3 1 2 run 170
4 1 2 swim 240
5 2 1 swim 100
6 2 1 run 110
7 2 2 run 180
8 2 2 swim 330
Теперь я хочу добавить новую переменную для суммы времени в секундах после каждого «выполнения» действия вследующее наблюдение (не имеет значения, что является следующим действием, «плавать» или «бегать»), и даже если следующее действие находится на следующем уровне, оно должно выполнить первое действие следующего уровня, чтобы построить разницу.Я также хочу иметь только одно наблюдение для каждого уровня для каждого пользователя.
Это должно выглядеть так:
game_data_new <- data.frame(player = c(1,1,2,2), level = c(1,2,1,2), n_run = c(2,1,1,1), n_swim = c(0,1,1,1), timeafterrun = c(170,70,70,150))
> game_data_new
player level n_run n_swim timeafterrun
1 1 1 2 0 170
2 1 2 1 1 70
3 2 1 1 1 70
4 2 2 1 1 150
170 в переменной "timeafterrun", например, вычисляется как (150-0) + (170-150) Здесь код должен выполнить первое наблюдение следующего уровня, уровня 2, потому что в уровне 1 больше нет действий.
Я пробовалниже, но я не знаю, что добавить к коду, чтобы сказать R, что он должен принимать разницу в datesec между следующим оберверсацией после «run» (даже на следующем уровне) и фактическим «run».
game <- game %>%
group_by(player,level) %>%
summarize(
n_run = sum(type == "run"),
n_swim = sum(type == "swim"),
timeafterrun = datesec(datesec of activity after_last_"run"-obervation) - datesec(actual_"run"-observation)
)