Это происходит из-за используемой вами функции SMA ():
library(TTR)
df <- data.frame(x=c(rep("A", 30), rep("B", 30),rep("C", 10)), y=rnorm(n = 70, 100, 20))
SMA(df$y[df$x=="C"], n=20)
#Error in runSum(x, n) : n = 20 is outside valid range: [1, 10]
Если вы посмотрите документацию по функции SMA()
, вы увидите:
x: Цена, объем и т. Д. Ряды, которые приводятся в соответствие с xts или матрицей.
n: число периодов для усреднения.Должно быть в диапазоне от 1 до nrow (x) включительно.
Таким образом, сначала вам нужно убедиться, что в ваших группах есть как минимум n
(n=20
в вашем случае) количество элементов.
В зависимости от того, что вы делаете, вы можете использовать функцию min () для установки n () в функции SMA (), то есть:
ddply(df, .(x), summarise, SMA10= tail(SMA(y, n=min(20,length(y))), 1))
x SMA10
#1 A 92.03348
#2 B 99.68643
#3 C 89.62087
Дает ли это правильный результат или нет, зависит отчто вы ищете.