我有一个时间序列数据帧,有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天
我正在寻找解决方案,或者至少是一些想法,以解决该问题。
马库斯
答案 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())
最后,谢谢您的投入