R 对数据框进行排序并创建新列,按id显示连续赢和输

R 对数据框进行排序并创建新列,按id显示连续赢和输,r,R,我的数据有65列,但我想根据团队id对数据框进行排序,然后我需要根据团队id从团队结果列计算连续赢或输的数量 例如,一个团队在一行中取得3场胜利,将在列的下方显示1,2,3。如果球队接着连输3场,接下来的3排将是-1、-2、-3等等。 我该怎么做? 这是我的数据: >team_id<-c("Minnesota", "Dallas", "Minnesota", "Chicago", "Brooklyn", "Cleveland", "Washington","Minnesota", "

我的数据有65列,但我想根据团队id对数据框进行排序,然后我需要根据团队id从团队结果列计算连续赢或输的数量

例如,一个团队在一行中取得3场胜利,将在列的下方显示1,2,3。如果球队接着连输3场,接下来的3排将是-1、-2、-3等等。 我该怎么做? 这是我的数据:

>team_id<-c("Minnesota", "Dallas", "Minnesota", "Chicago", "Brooklyn", "Cleveland", "Washington","Minnesota", "Dallas")
>team_outcome<-c("win","loss","loss","win","win","loss","win","loss","win")

>team\u idteam\u outcome您可以首先创建一个返回1,2,3。。。或者-1,-2,-3。。。根据条纹的不同:

calc_streak <- function (x) {
    if (all(x)) return (1:length(x))
    if (all(!x)) return (-1:-length(x))
    breaks <- which(x[-1]!=x[-length(x)])+1
    streaks <- split(x, findInterval(1:length(x), breaks)) # split outcomes into streaks
    unlist(lapply(streaks, calc_streak))
}

请提供计算条纹和预期输出。到目前为止你试过什么?这听起来像两个问题,(1)排序和(2)连续输赢。对于第(1)项,我将引导您访问第(2)项中的R-FAQ,正如上面所评论的,一个可复制的示例将使这一问题更容易回答。
library(dplyr); library(magrittr)
df <- group_by(df, team_id) %>% 
          do(data.frame(., streak=calc_streak(.$team_outcome=="win")))