Oi Fernando,
alguns comentarios antes.... Quando vc diz de interpolar,
vc quer "peso" como sendo sua variavel "Y" e "dia/data/etc"
como eixo "X"... correto?
Se for este o caso, a sua chamada de 'approx' esta'
incorreta... o "X" e' o primeiro argumento... e o "Y" e' o
segundo.
Alem disso, no codigo abaixo, colocarei a interpolacao para
funcionar direto das datas... se isso vai fazer sentido (ou
nao), deixo pra vc "descobrir" (a dica e' que o R vai achar
uma representacao numerica para data e converte-la antes do
ajuste... experimente um pouco e veja se e' conveniente para o
seu caso. Se nao for, crie a variavel adequada a priori).
Usando o seu conjunto de dados de exemplo (colado abaixo
apenas para conveniencia):
set.seed(20)
dados<-data.frame(ANIMAL=factor(rep(1:5,each=4)),
Peso=rnorm(20,30,4),
data=sample(seq(as.Date("01/04/2009",'%d/%m/%Y'),
as.Date("30/04/2009",'%d/%m/%Y'),length.out=30), 20),
day=1:20)
Tudo o que vc precisa e' criar uma funcao que funcione num
data.frame de mesma estrutura que este acima.... Veja o codigo
abaixo:
myf <- function(mydf)
with(mydf, approx(data, Peso))
Tudo o que a funcao 'myf' faz e' a interpolacao Peso x data
num data.frame generico chamado 'mydf'... Note que a funcao e'
burra o suficiente pra nao saber que existem animais
diferentes... mas se vc tivesse um data.frame para cada
animal, isso funcionaria...
Entao agora e' dividir os data.frames por animal e ter os
resultados... Para isso, eu gosto de usar o pacote 'plyr'...
Como a entrada de dados e' a partir de um data.frame (d) e a
saida eu quero que seja numa lista (l), entao vc usa o comando
'dlply'...
library(plyr)
res <- dlply(dados, .(ANIMAL), myf)
Por fim, o que isso faz e': pegar o seu data.frame
completo, quebrar em data.frames menores usando a variavel
'ANIMAL' e, em cada data.frame menor, aplicar a funcao
'myf'.... Seu resultado 'res', e' uma lista... cada elemento
da lista e' um resultado do approx para cada animal...
b
set.seed(20)
dados<-data.frame(ANIMAL=factor(rep(1:5,each=4)),
Peso=rnorm(20,30,4),
data=sample(seq(as.Date("01/04/2009",'%d/%m/%Y'),
as.Date("30/04/2009",'%d/%m/%Y'),length.out=30), 20),
day=1:20)
myf <- function(mydf)
with(mydf, approx(data, Peso))
library(plyr)
res <- dlply(dados, .(ANIMAL), myf)