我有一个时间序列数据帧,有超过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天
我期待着解决方案,或者至少是一些想法,如何解决这个问题。
马库斯
发布于 2019-02-01 20:36:36
我贴出了这个问题,bc我不知道如何解决这个问题,但在阅读了你的答案后,我设法创建了一个解决方案:
假设teams_ts是我的数据帧。
我提取每一行,并过滤掉NAs。我将行转置为列向量。这个新向量的行名是当天为一支球队比赛的球员的名称。
for (l in 1:nrow(teams_ts)) {
df <- t(teams_ts[l, !is.na(teams_ts[l,])])然后,我创建一个包含团队的向量,这些团队出现在新的列向量中。我去掉了第一个条目,bc它代表日期。
df_teams <- names(table(df))[-1]对于每一支球队,我都在寻找球员,在这支球队中踢球。这是通过过滤后的列向量的行名来完成的。
for (k in 1:length(df_teams)){
temp <- rownames(df)[df == df_teams[k]]这创建了一个字符向量,我将其折叠为一个字符串。这个字符串与日期和球队一起存储在dataframe播放器组合中。
df_temp <- data.frame(names = paste(temp, collapse = ", "),
day = teams_ts$Date[l],
team = df_teams[k])
player_combinations <- rbind(player_combinations, df_temp)
}
}现在,我可以通过使用nrow的group by回答我的问题:
final <- player_combinations %>% group_by(names) %>%
summarise(n = n())最后,感谢您的投入
https://stackoverflow.com/questions/54404452
复制相似问题