首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多列的时序分析

具有多列的时序分析
EN

Stack Overflow用户
提问于 2019-01-28 22:48:39
回答 1查看 248关注 0票数 0

我有一个时间序列数据帧,有超过1000列。多个列可以具有相同的离散值。我想知道的是,对于最长的时间,哪5列具有相同的值(其中5表示第二长,依此类推),

让我们通过一个用例来解释这一点:

这是一个每日的时间序列。每列代表一个足球运动员,每个单元格是一个球队,球员当时正在为之踢球。

所以数据帧看起来有点像这样:

代码语言:javascript
运行
复制
|---------------------|------------------|------------------|------------------|
|       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天

我期待着解决方案,或者至少是一些想法,如何解决这个问题。

马库斯

EN

回答 1

Stack Overflow用户

发布于 2019-02-01 20:36:36

我贴出了这个问题,bc我不知道如何解决这个问题,但在阅读了你的答案后,我设法创建了一个解决方案:

假设teams_ts是我的数据帧。

我提取每一行,并过滤掉NAs。我将行转置为列向量。这个新向量的行名是当天为一支球队比赛的球员的名称。

代码语言:javascript
运行
复制
for (l in 1:nrow(teams_ts)) {
df <- t(teams_ts[l, !is.na(teams_ts[l,])])

然后,我创建一个包含团队的向量,这些团队出现在新的列向量中。我去掉了第一个条目,bc它代表日期。

代码语言:javascript
运行
复制
df_teams <- names(table(df))[-1]

对于每一支球队,我都在寻找球员,在这支球队中踢球。这是通过过滤后的列向量的行名来完成的。

代码语言:javascript
运行
复制
for (k in 1:length(df_teams)){
    temp <- rownames(df)[df == df_teams[k]]

这创建了一个字符向量,我将其折叠为一个字符串。这个字符串与日期和球队一起存储在dataframe播放器组合中。

代码语言:javascript
运行
复制
    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回答我的问题:

代码语言:javascript
运行
复制
final <- player_combinations %>% group_by(names) %>% 
  summarise(n = n())

最后,感谢您的投入

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54404452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档