r - Dynamic counting of occurrences -
r newb. small rep of data.
teamhome <- c("lal", "hou", "sas", "lal") teamaway <- c("ind", "sas", "lal", "hou") df <- data.frame(cbind(teamhome, teamaway)) df teamhome teamaway lal ind hou sas sas lal lal hou
imagine these first 4 games of season thousands of games. home team , visitor team want compute cumulative number of games played @ home, on road , total. 3 new columns both home team , visiting team. (in case calculating new variables home team):
teamhome teamaway hometeamgamesplayedathome hometeamgamesplayedroad hometeamtotalgames 1 lal ind 1 0 1 2 hou sas 1 0 1 3 sas lal 1 1 2 4 lal hou 2 1 3
to compute first column (hometeamgamesplayedathome) managed with:
df$hometeamgamesplayedathome <- ave(df$teamhome==df$teamhome, df$teamhome, fun=cumsum)
but feels on complicated , can't calculate other columns approach.
i thought of using formula table count number of occurrences:
table(df$teamhome)
but computes totals , want result @ given point in time. thanks!
library(dplyr) df <- df %>% group_by(teamhome) %>% mutate(homegames = seq_along(teamhome)) lst <- list() for(i in 1:nrow(df)) lst[[i]] <- sum(df$teamaway[1:i] == df$teamhome[i]) df$hometeamgamesplayedroad <- unlist(lst) df %>% mutate(hometeamtotalgames = homegames+hometeamgamesplayedroad) teamhome teamaway homegames hometeamgamesplayedroad homegames 1 lal ind 1 0 1 2 hou sas 1 0 1 3 sas lal 1 1 2 4 lal hou 2 1 3
homegames
created seq_along
iterated row. hometeamgamesplayedroad
created loop checking values in teamaway
, including current game. final row sum of other 2 created.
Comments
Post a Comment