Error Code: Error in mutate_impl(.data, dots) : Evaluation error: k <= n is not TRUE
Error Code: Error in mutate_impl(.data, dots) : Evaluation error: k <= n is not TRUE
我在尝试找出数据中的错误时遇到了问题,我希望有人能提供一些见解。错误代码为:
Error in mutate_impl(.data, dots) : Evaluation error: k <= n is not TRUE
我可以让它处理小型数据集,甚至是我的数据的子集。该错误每 370-380 行发生一次。我看到的模式是它是数据中的 "Week 1" 并且每年只有一次。
这里是 link .csv 格式的数据:
http://www.filedropper.com/Whosebugdata
这是我使用的代码:
i = 3
QBrollavgDT <- data.table(rankDT)
QBrollavgDT <- QBrollavgDT[, c("Player_Name", "Season", "Week", "FDP")]
#QBrollavgDT <- subset(QBrollavgDT, Player_Name == "K.Collins") <- This works
#QBrollavgDT <- QBrollavgDT[c(381,759,1140,1510,1888,2264.2641), ] <- these are the rows that thorw the error
#begin calculating the rolling average and eliminating players with < i games played
QBrollavgDT <- setDT(QBrollavgDT)[, if (.N >= i) .SD, by = Player_Name] #this eliminates all players with < i games played
QBrollavgDT <- QBrollavgDT %>% #this is the code that puts the rolling average on and names the column RollAvg
arrange(Player_Name, Season, Week) %>%
group_by(Player_Name, Season) %>%
mutate(RollAvg = zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA))
一定是跟星期和季节有关,但我不明白怎么回事。我尝试了我能找到的所有解决方案,但无法解决任何问题。
发生错误是因为您没有足够的观测值来应用函数。
在 rollaply
中,您将宽度指定为 i
(3
),而您的某些 Player_Name & Season
组合没有 i
观察值。例如:
library(data.table)
i <- 3
# Generate data
QBrollavgDT <- fread("Whosebugdata.csv")
d <- QBrollavgDT[, if (.N >= i) .SD, by = Player_Name][order(Week)]
# Produces OPs error
d[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]
# Subset data where Player_Name & Season combinations have >= i observations
d2 <- d[, .N, .(Player_Name, Season)][N >= i]
d3 <- merge(d, d2)
# Apply rollaply on subseted data
d3[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]
# Result
Player_Name Season V1
1: A.Dalton 2011 NA
2: A.Dalton 2011 NA
3: A.Dalton 2011 11.200000
4: A.Dalton 2011 15.826667
5: A.Dalton 2011 13.353333
---
2884: Z.Mettenberger 2014 11.220000
2885: Z.Mettenberger 2015 NA
2886: Z.Mettenberger 2015 NA
2887: Z.Mettenberger 2015 9.833333
2888: Z.Mettenberger 2015 10.126667
快速解决方案:
计算SD
不仅要用Player_Name
,还要用Season
d <- QBrollavgDT[, if (.N >= i) .SD, .(Season, Player_Name)][order(Week)]
d[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]
我在尝试找出数据中的错误时遇到了问题,我希望有人能提供一些见解。错误代码为:
Error in mutate_impl(.data, dots) : Evaluation error: k <= n is not TRUE
我可以让它处理小型数据集,甚至是我的数据的子集。该错误每 370-380 行发生一次。我看到的模式是它是数据中的 "Week 1" 并且每年只有一次。
这里是 link .csv 格式的数据:
http://www.filedropper.com/Whosebugdata
这是我使用的代码:
i = 3
QBrollavgDT <- data.table(rankDT)
QBrollavgDT <- QBrollavgDT[, c("Player_Name", "Season", "Week", "FDP")]
#QBrollavgDT <- subset(QBrollavgDT, Player_Name == "K.Collins") <- This works
#QBrollavgDT <- QBrollavgDT[c(381,759,1140,1510,1888,2264.2641), ] <- these are the rows that thorw the error
#begin calculating the rolling average and eliminating players with < i games played
QBrollavgDT <- setDT(QBrollavgDT)[, if (.N >= i) .SD, by = Player_Name] #this eliminates all players with < i games played
QBrollavgDT <- QBrollavgDT %>% #this is the code that puts the rolling average on and names the column RollAvg
arrange(Player_Name, Season, Week) %>%
group_by(Player_Name, Season) %>%
mutate(RollAvg = zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA))
一定是跟星期和季节有关,但我不明白怎么回事。我尝试了我能找到的所有解决方案,但无法解决任何问题。
发生错误是因为您没有足够的观测值来应用函数。
在 rollaply
中,您将宽度指定为 i
(3
),而您的某些 Player_Name & Season
组合没有 i
观察值。例如:
library(data.table)
i <- 3
# Generate data
QBrollavgDT <- fread("Whosebugdata.csv")
d <- QBrollavgDT[, if (.N >= i) .SD, by = Player_Name][order(Week)]
# Produces OPs error
d[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]
# Subset data where Player_Name & Season combinations have >= i observations
d2 <- d[, .N, .(Player_Name, Season)][N >= i]
d3 <- merge(d, d2)
# Apply rollaply on subseted data
d3[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]
# Result
Player_Name Season V1
1: A.Dalton 2011 NA
2: A.Dalton 2011 NA
3: A.Dalton 2011 11.200000
4: A.Dalton 2011 15.826667
5: A.Dalton 2011 13.353333
---
2884: Z.Mettenberger 2014 11.220000
2885: Z.Mettenberger 2015 NA
2886: Z.Mettenberger 2015 NA
2887: Z.Mettenberger 2015 9.833333
2888: Z.Mettenberger 2015 10.126667
快速解决方案:
计算SD
不仅要用Player_Name
,还要用Season
d <- QBrollavgDT[, if (.N >= i) .SD, .(Season, Player_Name)][order(Week)]
d[, zoo::rollapply(FDP, i, mean, by = 1, align = "right", fill = NA), .(Player_Name, Season)]