多列时间序列分析

时间:2019-01-28 14:48:39

标签: r

我有一个时间序列数据帧,有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         |
|---------------------|------------------|------------------|------------------|

因此,玩家A在2010-08-04更改了球队。
几年后,球员C开始踢职业足球。

现在我想知道,哪5个玩家在一起玩的时间最长。包括所有5个玩家都同时将团队更改为同一新团队的情况。
想要得到类似以下结果:
玩家A,玩家B,玩家Z,玩家Y,玩家W:1024天
玩家C,玩家D,玩家E,玩家F,玩家G:1021天
玩家A,夹层B,玩家Z,玩家X,玩家C:512天

我正在寻找解决方案,或者至少是一些想法,以解决该问题。

马库斯

1 个答案:

答案 0 :(得分:0)

我发布了这个问题,因为我没有一个主意如何解决这个问题, 但是阅读完您的答案后,我设法创建了一个解决方案:

让我们说“ teams_ts”是我的数据框。
我提取每一行,并过滤出NA。我将行转置为列向量。 这种新的载体的rownames是球员的名字,打了一队在那一天。

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通过group by回答我的问题。

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

最后,谢谢您的投入