Анализ временных рядов с несколькими столбцами - PullRequest
0 голосов
/ 28 января 2019

У меня есть фрейм данных временных рядов с более чем 1000 столбцами.Несколько столбцов могут иметь одинаковые дискретные значения.Я хочу знать, какие 5 столбцов имеют одинаковые значения для самого длинного времени (какие 5 столбцов для второго самого длинного и т. Д.),

Позволяет объяснить это с помощью варианта использования:
Этоежедневные временные ряды.Каждый столбец представляет одного футбольного игрока, каждая ячейка - это команда, за которую игрок играет в то время.
Таким образом, кадр данных выглядит примерно так:

|---------------------|------------------|------------------|------------------|
|       TS            |    Player A      |    Player B      |    Player C      |
|---------------------|------------------|------------------|------------------|
|      2010-08-01     |     Real Madrid  |     Chelsea      |       NA         |
|---------------------|------------------|------------------|------------------|
|      2010-08-02     |     Real Madrid  |     Chelsea      |       NA         |
|---------------------|------------------|------------------|------------------|
|      2010-08-03     |     Real Madrid  |     Chelsea      |       NA         |
|---------------------|------------------|------------------|------------------|
|      2010-08-04     |     Chelsea      |     Chelsea      |       NA         |
|---------------------|------------------|------------------|------------------|

Таким образом, игрок А изменил команду на2010-08-04.
Игрок С начал играть в профессиональный футбол несколько лет спустя.

Теперь я хотел бы знать, какие 5 игроков играли вместе дольше всего.Включая случай, когда все 5 игроков изменили команду в одно и то же время на одну и ту же новую команду.
Мне бы хотелось получить такой результат, как:
Игрок A, Игрок B, Игрок Z, Игрок Y, Игрок W: 1024 дня
Игрок C, игрок D, игрок E, игрок F, игрок G: 1021 день
Игрок A, игрок B, игрок Z, игрок X, игрок C: 512 дней

IЯ смотрю вперед для решения или, по крайней мере, для некоторых идей, как решить эту проблему.

Маркус

1 Ответ

0 голосов
/ 01 февраля 2019

Я отправил этот вопрос, потому что у меня не было ни единой идеи, как решить эту проблему, но после прочтения ваших ответов мне удалось создать решение:

Допустим, team_ts - это мой фрейм данных.
Я извлекаюкаждой строке и отфильтровывать NA.Я перенесу строку в вектор столбца.Имена строк этого нового вектора - это имена игроков, играющих за команду в тот день.

for (l in 1:nrow(teams_ts)) {
df <- t(teams_ts[l, !is.na(teams_ts[l,])])

Затем я создаю вектор с командами, которые присутствуют в новом векторе столбца.Я избавляюсь от первой записи, потому что она представляет день.

df_teams <- names(table(df))[-1]

Для каждой команды я ищу игроков, играющих в этой команде.Это делается с помощью имен строк отфильтрованного вектора столбца.

for (k in 1:length(df_teams)){
    temp <- rownames(df)[df == df_teams[k]]

Это создает вектор символов, который я свернул в одну строку.Эта строка с указанием дня и команды хранится в комбинациях игроков данных.

    df_temp <- data.frame(names = paste(temp,  collapse = ", "),
                      day = teams_ts$Date[l],
                      team = df_teams[k])
    player_combinations <- rbind(player_combinations, df_temp)
  }
}

Теперь я могу ответить на мой вопрос через группу с помощью nrows.:

final <- player_combinations %>% group_by(names) %>% 
  summarise(n = n())

Вв конце, спасибо за ваш вклад

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...