Проблема в том, что функция ksmooth вернет список, и эти списки будут сохранены как таковые по запросу.Между прочим, я не думаю, что вы даже хотите использовать rollaplly, поскольку это не делает это для каждой даты, но "катит" по фрейму данных.Я полагаю из вашего объяснения, что это не желаемое поведение.
Я действительно не мог решить это, используя объект зоопарка, поскольку этот довольно ограничительный.Может быть, кто-то еще покажет вам это.Вы можете сконструировать этот фрейм данных, используя функцию ddply
из пакета plyr
:
tt <- ddply(test,.(Date),
function(x) {
as.data.frame(ksmooth(x$return,x$price,"normal",bandwidth=2,n.points=50))
})
tt затем можно преобразовать в объект зоопарка, используя
tt2 <- zoo(tt, as.POSIXct(tt$Date) + 1:50)
В качестве альтернативы, вы можетеможет сделать это вручную, используя немного манипуляции со списком.снова, полученный tt может быть преобразован с помощью строки выше в объект зоопарка.
tt <- split(test,test$Date)
tt <- lapply(tt,function(x){
as.data.frame(ksmooth(x$return,x$price,"normal",bandwidth=2,n.points=50))
})
tt <- do.call(rbind,tt)
names(tt) <- c("return","price")
tt$Date <- as.Date(gsub("\\.\\d+","",rownames(tt)))
Имейте в виду, я использовал read.table()
для построения теста:
zz <- textConnection(
"Date , return , price , vol
20100902 , 0.3 , 15 , 8.5
20100902 , 0.4 , 17 , 8.6
20100902 , 0.6 , 19 , 8.7
20100903 , 0.2 , 13 , 8.2
20100903 , 0.4 , 17 , 8.6
20100903 , 0.8 , 21 , 9.0"
)
test <- read.table(zz,header=T,sep=",")
test$Date <- as.Date(as.character(test$Date),format="%Y%m%d")
close(zz)