Как объяснено в комментариях, проблема заключается в том, что некоторые уровни факторов были отфильтрованы из набора данных, что привело к ошибке при использовании ave
. Мы можем проверить это, используя стандартный набор данных mtcars
1003 *
df <- mtcars
df$cyl <- as.factor(df$cyl) #Convert cyl to factor
df <- subset(df, cyl!= 4) #keep rows where cyl is not equal to 4
ave(df$mpg, df$cyl, FUN=pacf1)
Ошибка в ts (x): объект 'ts' должен иметь одно или несколько наблюдений
Мы можем решить эту проблему, отбросив неиспользуемые уровни
df$cyl <- droplevels(df$cyl)
ave(df$mpg, df$cyl, FUN=pacf1)
#[1] 0.234 0.234 0.234 0.209 0.234 0.209 0.234 0.234 0.209 0.209 0.209 0.209
# 0.209 0.209 0.209 0.209 0.209 0.209 0.209 0.234 0.209
#Or as @thelatemail mentions use
#ave(df$mpg, df$cyl, FUN=pacf1, drop = TRUE)
если мы используем dplyr
или data.table
, эта проблема решается автоматически.
library(dplyr)
df %>%
group_by(cyl) %>%
mutate(score = pacf1(mpg))
library(data.table)
setDT(df)[, score := pacf1(mpg), by = cyl]