【发布时间】:2020-06-06 08:27:07
【问题描述】:
我拥有自 2003 年以来发生的所有 NCAA 篮球比赛的数据。我正在尝试实现一个 for 循环,该循环将计算某个时间点每次统计数据的平均值。这是我的 for 循环:
library(data.table)
roll_season_team_stats <- NULL
for (i in 0:max(stats_DT$DayNum)) {
stats <- stats_DT[DayNum < i]
roll_stats <- dcast(stats_DT, TeamID+Season~.,fun=mean,na.rm=T,value.var = c('FGM', 'FGA', 'FGM3', 'FGA3', 'FTM', 'FTA', 'OR', 'DR', 'TO'))
roll_stats$DayNum <- i + 1
roll_season_team_stats <- rbind(roll_season_team_stats, roll_stats)
}
这是 dput 的输出:
structure(list(Season = c(2003L, 2003L, 2003L, 2003L, 2003L,
2003L, 2003L, 2003L, 2003L, 2003L), DayNum = c(10L, 10L, 11L,
11L, 11L, 11L, 12L, 12L, 12L, 12L), TeamID = c(1104L, 1272L,
1266L, 1296L, 1400L, 1458L, 1161L, 1186L, 1194L, 1458L), FGM = c(27L,
26L, 24L, 18L, 30L, 26L, 23L, 28L, 28L, 32L), FGA = c(58L, 62L,
58L, 38L, 61L, 57L, 55L, 62L, 58L, 67L), FGM3 = c(3L, 8L, 8L,
3L, 6L, 6L, 2L, 4L, 5L, 5L), FGA3 = c(14L, 20L, 18L, 9L, 14L,
12L, 8L, 14L, 11L, 17L), FTM = c(11L, 10L, 17L, 17L, 11L, 23L,
32L, 15L, 10L, 15L), FTA = c(18L, 19L, 29L, 31L, 13L, 27L, 39L,
21L, 18L, 19L), OR = c(14L, 15L, 17L, 6L, 17L, 12L, 13L, 13L,
9L, 14L), DR = c(24L, 28L, 26L, 19L, 22L, 24L, 18L, 35L, 22L,
22L), TO = c(23L, 13L, 10L, 12L, 14L, 9L, 17L, 19L, 17L, 6L)), row.names = c(NA,
-10L), class = c("data.table", "data.frame"), .internal.selfref = <pointer: 0x102004ae0>)
循环成功运行,但没有产生正确的输出。它不是显示团队随时间推移的平均值,而是每天给我相同的数字(我假设是每个统计数据的总体平均值)。任何想法我的循环有什么问题?谢谢!
【问题讨论】:
-
您没有使用您在第一行循环中分配的
stats。在dcast中使用stats而不是stats_DT。 -
如果我将 stats_DT 更改为 stats 我会收到以下错误:
-
dcast.data.table 中的错误(stats, TeamID + Season ~ ., fun = mean, na.rm = T, : Can not cast an empty data.table
标签: r loops for-loop debugging data.table