<html>
<head>
<meta content="text/html; charset=ISO-8859-1"
http-equiv="Content-Type">
</head>
<body>
Muito obrigado Benilton! Era exatamente isso que queria. <br>
Estava seguindo por caminhos tão complicados. <br>
Obrigado por tudo<br>
<div class="moz-cite-prefix">On 01-10-2014 15:50, Benilton Carvalho
wrote:<br>
</div>
<blockquote
cite="mid:CAO-arWNZ77j5ah23ZxM1NRspR+w-WyijzDbO5k5_cvs=_n+R8w@mail.gmail.com"
type="cite">
<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 moz-do-not-send="true"
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=factor(rep(1:5,each=4)),Peso=rnorm(20,30,4),
data=sample(seq(as.Date("01/04/2009",'%d/%m/%Y'),<br>
as.Date("30/04/2009",'%d/%m/%Y'),length.out=30),20),day=1: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.numeric(i),]$Peso,dados[dados$ANIMAL==as.numeric(i),]$data),n=15)<br>
}<br>
return(b)<br>
}<br>
_______________________________________________<br>
R-br mailing list<br>
<a moz-do-not-send="true"
href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a><br>
<a moz-do-not-send="true"
href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br"
target="_blank">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a><br>
Leia o guia de postagem (<a moz-do-not-send="true"
href="http://www.leg.ufpr.br/r-br-guia" target="_blank">http://www.leg.ufpr.br/r-br-guia</a>)
e forneça código mínimo reproduzível.<br>
</blockquote>
</div>
<br>
</div>
<br>
<fieldset class="mimeAttachmentHeader"></fieldset>
<br>
<pre wrap="">_______________________________________________
R-br mailing list
<a class="moz-txt-link-abbreviated" href="mailto:R-br@listas.c3sl.ufpr.br">R-br@listas.c3sl.ufpr.br</a>
<a class="moz-txt-link-freetext" href="https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br">https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br</a>
Leia o guia de postagem (<a class="moz-txt-link-freetext" href="http://www.leg.ufpr.br/r-br-guia">http://www.leg.ufpr.br/r-br-guia</a>) e forneça código mínimo reproduzível.</pre>
</blockquote>
<br>
</body>
</html>