<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body>
    Obrigado pela atenção<br>
    Essa conversão eu consegui fazer. O código gera o dataframe da forma
    como quero o meu problema é conseguir gerar o número de observações
    correta para cada intervalo entre observações para que a quantidade
    de valores gerados coincida com o restante do banco de dados que
    possuo<br>
    <br>
    <br>
    <div class="moz-cite-prefix">On 02-10-2014 16:37, Jônatan wrote:<br>
    </div>
    <blockquote
cite="mid:CAEiHnvNGY78Fpw=DSo7Z7csuy8Ltax3urzHng6HQFFS0Ujg5xQ@mail.gmail.com"
      type="cite">
      <div dir="ltr">Para parte final do seu script ("<span
          style="font-family:arial,sans-serif;font-size:13px">Conversão
          da lista Res para dataframe"</span>) acho (não testado nos
        seus dados) que com um df <- melt(res) você converte para
        dataframe. A função melt está disponível no pacote reshape2.
        <div><br>
        </div>
      </div>
      <div class="gmail_extra"><br>
        <div class="gmail_quote">2014-10-02 16:15 GMT-03:00 Fernando
          Souza <span dir="ltr"><<a moz-do-not-send="true"
              href="mailto:nandodesouza@gmail.com" target="_blank">nandodesouza@gmail.com</a>></span>:<br>
          <blockquote class="gmail_quote" style="margin:0 0 0
            .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000"> Caro  Benilton, tudo
              bem?<br>
              O código que você me passou fez exatamente o que eu
              queria, mas estou tendo o seguinte problema.<br>
              Na função approx () eu determino o número de medidas fixas
              (n) entre observações. No entanto eu tenho número de
              observações diferentes entre animais e intervalo entre
              observações diferentes.<br>
              Por exemplo: Animal 1 possuo 4 pesagens intervaladas de 10
              dias (ou seja 40 observações) ,animal 2 tenho 3 pesagens
              intervaladas 15 dias (75 observações) etc... e sendo assim
              ao determinar um número fixo (n) p.ex aprrox(x,y,n=15) eu
              terei 60 observações para o animal 1 (excedente de 10) e 
              75 observações animais 2 (exato)<br>
              <br>
              Eu estou pensando em uma função que pudesse alterar o
              valor de n para cada intervalo entre observações. Como é
              possível fazer isso<br>
              <br>
              dados2<-structure(list(Animal = structure(c(1L, 1L, 1L,
              1L, 1L, 1L, 8L, <br>
              8L, 8L, 16L, 16L, 16L, 16L, 16L, 16L, 24L, 24L, 24L, 34L,
              34L, <br>
              34L, 37L, 37L, 37L, 37L, 37L, 37L), .Label = c("1", "12",
              "14", <br>
              "15", "17", "18", "19", "2", "21", "22", "23", "25", "26",
              "*27", <br>
              "28", "3", "30", "32", "34", "35", "37", "38", "39", "4",
              "40", <br>
              "41", "42", "43", "44", "46", "47", "48", "49", "5", "50",
              "53", <br>
              "7", "8", "9"), class = "factor"), Gest = c(140L, 140L,
              140L, <br>
              140L, 140L, 140L, 100L, 100L, 100L, 130L, 130L, 130L,
              130L, 130L, <br>
              130L, 100L, 100L, 100L, 100L, 100L, 100L, 140L, 140L,
              140L, 140L, <br>
              140L, 140L), Manej = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
              1L, <br>
              1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L,
              2L, 2L, <br>
              2L), Data = structure(c(-715270, -715256, -715241,
              -715228, -715214, <br>
              -715193, -715270, -715256, -715235, -715270, -715256,
              -715241, <br>
              -715228, -715214, -715200, -715270, -715256, -715235,
              -715270, <br>
              -715256, -715235, -715270, -715256, -715241, -715228,
              -715214, <br>
              -715193), class = "Date"), IntervaloPeso = c(14L, 15L,
              13L, 14L, <br>
              21L, 0L, 14L, 21L, 0L, 14L, 15L, 13L, 14L, 14L, 0L, 14L,
              21L, <br>
              0L, 14L, 21L, 0L, 14L, 15L, 13L, 14L, 21L, 0L), Peso =
              c(37, <br>
              38.2, 41, 42.9, 43, 49, 40, 41.8, 40.8, 38, 39.9, 41.9,
              45.2, <br>
              46.2, 51.8, 40, 40.9, 41.9, 32.3, 34.9, 35, 35.1, 36.5,
              35.2, <br>
              38.3, 38, 40.5)), .Names = c("Animal", "Gest", "Manej",
              "Data", <br>
              "IntervaloPeso", "Peso"), row.names = c(NA, 27L), class =
              "data.frame")<br>
              <br>
              library(plyr)<br>
              library(zoo)<br>
              intervalo<- ddply(dados2, .(Animal), summarise,
              intervalo = diff(Data)) #intervalo entre medidas<br>
              n_observacao<- as.vector(table(dados2$Animal)) #nunero
              de observações em cada animal<br>
#----------------------------------------------------------------------------------------------------------------------------<br>
              #isso é que esto tentando fazer ! mas não funciona<br>
              myf2<-function(mydf,intervalo){<br>
              + for(i in 1:length(intervalo$periodo)){<br>
              + approx(mydf$Data,mydf$Peso,n=intervalo$periodo[i])}<br>
              }<br>
              res <- dlply(dados2, .(Animal), myf2)<br>
              <br>
#-----------------------------------------------------------------------------------------------<br>
              Exemplo do Benilton, n fixo igual a 15<br>
              <br>
              myf <- function(mydf)<br>
                     with(mydf, approx(Data, Peso,n= 15))  #esta funçao
              realiza a interpolaçao agrupada por animal<br>
              <br>
              res <- dlply(dados2, .(Animal), myf)<br>
              <br>
              <br>
              <br>
              #------------------------------------Conversão da lista
              Res para
dataframe--------------------------------------------------------------------------------------<br>
              <br>
              df<-data.frame(Data=unlist(sapply(res, "[",
              1)),Peso=unlist(sapply(res,"[",2))) #remove os dados da
              lista e o converte em data frame<br>
              ID<-row.names(df)#captura os nomes das linhas do data
              frame<br>
              df<-cbind(ID,df)#adiciona os nomes da linha como coluna
              de identificaçao<br>
              row.names(df)<-NULL#remove nome das linhas<br>
              df$Data<-as.Date(df$Data) #base de dados com formato de
              data corrigida<br>
df$Animal<-factor(rep(unique(levels(dados2$Animal)),each=50))<span
                class=""><br>
                <br>
                <div>On 01-10-2014 15:50, Benilton Carvalho wrote:<br>
                </div>
              </span>
              <div>
                <div class="h5">
                  <blockquote 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></fieldset>
                    <br>
                    <pre>_______________________________________________
R-br mailing list
<a moz-do-not-send="true" href="mailto:R-br@listas.c3sl.ufpr.br" target="_blank">R-br@listas.c3sl.ufpr.br</a>
<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>
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.</pre>
                  </blockquote>
                  <br>
                </div>
              </div>
            </div>
            <br>
            _______________________________________________<br>
            R-br mailing list<br>
            <a moz-do-not-send="true"
              href="mailto:R-br@listas.c3sl.ufpr.br">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>
        <br clear="all">
        <div><br>
        </div>
        -- <br>
        <div dir="ltr">
          <div><font style="font-family:arial">###############################################################</font><br>
            <span style="font-family:arial;font-size:small">##  </span><span
style="font-size:11px;text-align:center;background-color:rgb(239,239,239);color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;line-height:13px">Jônatan
              Dupont Tatsch</span></div>
          <div><span style="font-family:arial;font-size:small">##  </span><span
style="color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10.909090995788574px;line-height:12.997159004211426px;text-align:center;background-color:rgb(239,239,239)">Professor
              do Departamento de Física</span><font
              style="font-size:small" face="arial"><br>
            </font></div>
          <div><span style="font-size:small;font-family:arial">##  </span><span
style="color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10.909090995788574px;line-height:12.997159004211426px;text-align:center;background-color:rgb(239,239,239)">Centro
              de Ciências Exatas e Naturais (CCNE)</span><br>
          </div>
          <div><span style="font-size:small;font-family:arial">##  </span><span
style="color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;font-size:10.909090995788574px;line-height:12.997159004211426px;text-align:center;background-color:rgb(239,239,239)">Universidade
              Federal de Santa Maria</span></div>
          <div><span style="font-family:arial;font-size:small">##  </span><span
style="font-size:11px;text-align:center;background-color:rgb(239,239,239);color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;line-height:13px">Faixa
              de Camobi, Prédio 13 - Campus UFSM - </span><span
style="font-size:11px;text-align:center;background-color:rgb(239,239,239);color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;line-height:13px">Santa
              Maria, RS, Brasil - 97105-900</span><br>
          </div>
          <div style="font-family:arial;font-size:small">##  <span
style="font-size:11px;text-align:center;background-color:rgb(239,239,239);color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;line-height:13px">Telefone:
              +55(55)33012083</span><br>
          </div>
          <div style="font-family:arial;font-size:small">##  <span
style="font-size:11px;text-align:center;background-color:rgb(239,239,239);color:rgb(150,150,150);font-family:Verdana,Arial,Helvetica,sans-serif;line-height:13px"><a
                moz-do-not-send="true"
                href="http://www.ufsm.br/meteorologia" target="_blank">www.ufsm.br/meteorologia</a></span></div>
          <div style="font-family:arial;font-size:small">###############################################################</div>
        </div>
      </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>