我从实验中得到以下data.frame d
:
- Variable y (response, continuous)
- Factor f (500 levels)
- Time t (posixct)
在过去8年中,对于每个级别的f,y大约每月测量一次(t的确切日期)。有时每月有两项措施,有时几个月没有采取任何措施。
很抱歉没有提供示例数据,但编制不规则的时间序列超出了我的R知识。 ;)
我想对这些数据进行以下操作:
loess()
函数(y ~ t)
对f
y
每月的第一天以及f
的每个级别我认为第一点是通过使用Hadleys回答this问题来解决的:
models <- dlply(d, "f", function(df) loess(y ~ as.numeric(t), data = df))
所以,现在我有一个models
(类list
),每个级别f
都有一个模型。
我还为y
的每个级别创建了我想预测f
的时间:
dates <- seq(min(t),max(t),"months")
但现在我仍然坚持如何为每个模型做出预测。这样的东西应该工作(伪代码):
for each f in models
p.f <- predict(models(f),dates)
p.f.complete <- r.bind(p.f.comlete,p.f)
next f
结果,我想要这个data.frame:
非常感谢任何帮助。
答案 0 :(得分:2)
被修改
关键是使用ldply()和predict()。以下是使用虚拟数据的示例:
library(plyr)
d <- data.frame(
f = rep(LETTERS[1:5], each=20),
t = rep(1:20, 5),
y = runif(100))
models <- dlply(d, "f", function(df) loess(y ~ as.numeric(t), data = df))
predict(models[[1]])
x <- ldply(models, predict)
colnames(x) <- c("f", 1:20)
x
答案 1 :(得分:1)
最复杂的事情是将函数设为predict
并使用lapply
。这不是很难做到的。
dates <- data.frame(t = dates)
y.predicted <- lapply(models, function (x) predict(x, newdata = dates))
如果你想rbind y.predicted只需使用
y.predicted <- do.call(rbind, y.predicted)
HTH