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)