У меня есть данные о нескольких тысячах американских баскетболистов за несколько лет.
Каждый баскетболист имеет уникальный идентификатор. Известно, для какой команды и на какой позиции они играют в данном году, очень похоже на фиктивные данные df
ниже:
df <- data.frame(id = c(rep(1:4, times=2), 1),
year = c(1, 1, 2, 2, 3, 4, 4, 4,5),
team = c(1,2,3,4, 2,2,4,4,2),
position = c(1,2,3,4,1,1,4,4,4))
> df
id year team position
1 1 1 1 1
2 2 1 2 2
3 3 2 3 3
4 4 2 4 4
5 1 3 2 1
6 2 4 2 1
7 3 4 4 4
8 4 4 4 4
9 1 5 2 4
Какой эффективный способ манипулировать df
в new_df
ниже?
> new_df
id move time position.1 position.2 year.1 year.2
1 1 0 2 1 1 1 3
2 2 1 3 2 1 1 4
3 3 0 2 3 4 2 4
4 4 1 2 4 4 2 4
5 1 0 2 1 4 3 5
В new_df
первое вхождение баскетболиста сравнивается со вторым вхождением, записывается, поменялся ли игрок командами и сколько времени потребовалось игроку, чтобы сделать это.
Примечание:
В реальных данных некоторые баскетболисты встречаются более двух раз и могут играть за несколько команд и на нескольких позициях.
В таком случае добавляется новая строка в new_df
, которая сравнивает каждое дополнительное вхождение игрока только с предыдущим вхождением.
Редактировать: я думаю, что это не очень простое reshape
упражнение, из-за причин, упомянутых в предыдущих двух предложениях. Чтобы прояснить это, я добавил дополнительное вхождение идентификатора игрока 1 к фиктивным данным.
Любая помощь приветствуется и ценится!