<div dir="ltr">Oi Fernando,<div><br></div><div>alguns comentarios antes.... Quando vc diz de interpolar, vc quer "peso" como sendo sua variavel "Y" e "dia/data/etc" como eixo "X"... correto?</div><div><br></div><div>Se for este o caso, a sua chamada de 'approx' esta' incorreta... o "X" e' o primeiro argumento... e o "Y" e' o segundo.</div><div><br></div><div>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).</div><div><br></div><div>Usando o seu conjunto de dados de exemplo (colado abaixo apenas para conveniencia):</div><div><br></div><div><div>set.seed(20)</div><div>dados<-data.frame(ANIMAL=factor(rep(1:5,each=4)),</div><div>                  Peso=rnorm(20,30,4),</div><div>                  data=sample(seq(as.Date("01/04/2009",'%d/%m/%Y'),</div><div>                      as.Date("30/04/2009",'%d/%m/%Y'),length.out=30), 20),</div><div>                  day=1:20)</div></div><div><br></div><div>Tudo o que vc precisa e' criar uma funcao que funcione num data.frame de mesma estrutura que este acima.... Veja o codigo abaixo:</div><div><br></div><div><div>myf <- function(mydf)</div><div>    with(mydf, approx(data, Peso))</div></div><div><br></div><div>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...</div><div><br></div><div>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'...</div><div><br></div><div><div>library(plyr)</div><div>res <- dlply(dados, .(ANIMAL), myf)</div></div><div><br></div><div>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...</div><div><br></div><div>b</div><div><br></div><div><br></div><div><div><div>set.seed(20)</div><div>dados<-data.frame(ANIMAL=factor(rep(1:5,each=4)),</div><div>                  Peso=rnorm(20,30,4),</div><div>                  data=sample(seq(as.Date("01/04/2009",'%d/%m/%Y'),</div><div>                      as.Date("30/04/2009",'%d/%m/%Y'),length.out=30), 20),</div><div>                  day=1:20)</div></div></div><div><div><div>myf <- function(mydf)</div><div>    with(mydf, approx(data, Peso))</div></div></div><div><div><div>library(plyr)</div><div>res <- dlply(dados, .(ANIMAL), myf)</div></div></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">Em 1 de outubro de 2014 14:16, Fernando Souza <span dir="ltr"><<a href="mailto:nandodesouza@gmail.com" target="_blank">nandodesouza@gmail.com</a>></span> escreveu:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Caros amigos<br>
<br>
Estou necessitando faze a interpolação de algumas pesagens tomadas em diferentes animais. Eu preciso da interpolação feita para cada animal separadamente e o intervalo entre medidas não é fixo. Eu estou utilizando a função approx() no entanto devido ao número de animais utilizados fica muito dispendioso fazer fazer esta interpolação uma a uma.  Por isso gostaria de uma função onde um pudesse automatizar este procedimento.<br>
<br>
set.seed(20)<br>
dados<-data.frame(ANIMAL=<u></u>factor(rep(1:5,each=4)),Peso=<u></u>rnorm(20,30,4), data=sample(seq(as.Date("01/<u></u>04/2009",'%d/%m/%Y'),<br>
as.Date("30/04/2009",'%d/%m/%<u></u>Y'),length.out=30),20),day=1:<u></u>20)<br>
<br>
Estou tentando fazer uma função que estime os pontos da interpolação agrupados por Animal . Entretanto tenho pouco conhecimento em programação para fazer isso. Tenho tentado fazer isso, sem muito sucesso.<br>
Alguém poderia me ajudar? Abraços<br>
<br>
aprendendo<-function(dados){<br>
     niveis<-levels(dados$ANIMAL)<br>
     dia<-diff(dados$data)<br>
     for(i in min(niveis):max(niveis)){<br>
<br>
        b<- approx(dados[dados$ANIMAL==as.<u></u>numeric(i),]$Peso,dados[dados$<u></u>ANIMAL==as.numeric(i),]$data),<u></u>n=15)<br>
           }<br>
       return(b)<br>
             }<br>
______________________________<u></u>_________________<br>
R-br mailing list<br>
<a href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br" target="_blank">https://listas.inf.ufpr.br/<u></u>cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-<u></u>guia</a>) e forneça código mínimo reproduzível.<br>
</blockquote></div><br></div>