Obrigado pela resposta Cesar, Então o maior entrave é a dificultade com a sintaxe e vou tentar trazer o resultado para o mais próximo que eu consigo:
library(dplyr) library(tidyr) my.ds <- read.csv(" https://raw.githubusercontent.com/Leprechault/trash/main/test_ants.csv") my.ds$ClassType <- cut(my.ds$AT,breaks=c(-Inf,1,2.9,8.9,24.9,49.9,Inf), right=FALSE,labels=c("Class_0_1","Class_1_3","Class_3_9", "Class_9_25","Class_25_50","Class_50")) if (my.ds$nest<1000 & my.ds$ClassType!="Class_0_1") { #1) Se nest for < 1000 - considerando "Class_1_3" para "Class_50" counts <- my.ds%>%group_by(nest)%>%summarize(N=length(unique(ClassType))) my.ds.3 <- my.ds%>%group_by(nest)%>%dplyr::summarize(ClassType=ClassType, max_AT=max(AT)) my.ds.3$class_max<- as.numeric(gsub('Class_[^_]*[^_]_', '', my.ds.3$ ClassType)) # Extrai o maior valor da classe if(counts$N>1 | my.ds.3$max_AT>my.ds.3$class_max){ #ClassType não mudar por nest durante o tempo ou AT entrar e não sair da classe nests <- unique(rbind(counts$nest,my.ds.3$nest)) my.ds.2 <- my.ds[my.ds$nest %in% nests,] my.ds.2$velocity <- c(0,diff(my.ds.2$AT))/c(0,diff(my.ds.2$days)) # Procurando o último ClassType antes de AT e calcula a `velocity` entre o último ClassType e o atual ClassType para nest my.ds.2 <- %>% group_by(nest,ClassType)%>% summarize(velocity=mean(velocity)) %>% complete(ClassType, tidyr:fill = list(velocity = NA)) %>% fill(velocity, .direction = "downup") # Se atrasar qualquer ClassType em "Class_1_3" para "Class_50" em uma classe maior que o valor de AT no tempo 0, a classe não presente é o valor de velocity do último ClassType } } else { #Se o ninho for >= 1000 - apenas considerando "Class_0_1" my.ds$velocity <- c(0,diff(my.ds$AT))/c(0,diff(my.ds$days)) } Em qua., 29 de jun. de 2022 às 11:00, <r-br-requ...@listas.c3sl.ufpr.br> escreveu: > Enviar submissões para a lista de discussão R-br para > r-br@listas.c3sl.ufpr.br > > Para se cadastrar ou descadastrar via WWW, visite o endereço > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > ou, via email, envie uma mensagem com a palavra 'help' no assunto ou > corpo da mensagem para > r-br-requ...@listas.c3sl.ufpr.br > > Você poderá entrar em contato com a pessoa que gerencia a lista pelo > endereço > r-br-ow...@listas.c3sl.ufpr.br > > Quando responder, por favor edite sua linha Assunto assim ela será > mais específica que "Re: Contents of R-br digest..." > > > Tópicos de Hoje: > > 1. Re: Criação de uma função complexa com dplyr (Cesar Rabak) > > > ---------------------------------------------------------------------- > > Message: 1 > Date: Tue, 28 Jun 2022 17:52:46 -0300 > From: Cesar Rabak <cesar.ra...@gmail.com> > To: a lista Brasileira oficial de discussão do programa R. > <r-br@listas.c3sl.ufpr.br> > Subject: Re: [R-br] Criação de uma função complexa com dplyr > Message-ID: > < > cakrf98n75bodbfyc0o5wbg9von2pfx+hhexqudkvjsoohs6...@mail.gmail.com> > Content-Type: text/plain; charset="utf-8" > > A sua descrição está difícil de acompanhar porque é colocado entremeado nas > regras termos que necessitam melhor definição para entendê-las: > > > - considerando "Class_1_3" para "Class_50" ; > - ClassType não mudar por nest durante o tempo ; > - AT entrar mas não sair do ClassType ; > - o último ClassType antes de AT ; > - último ClassType e o atual ClassType para nest ; > - Se atrasar qualquer ClassType em ; > - "Class_1_3" para "Class_50" ; > - valor de AT no tempo 0 ; > - classe não presente ; > - último ClassType para nest ; > > Ademais, parece que sua formulação de velocidade e mesmo a saída desejável > indica, que existam velocidades diferentes para o mesmo nest e classe. > > Por certo esses termos todos acima devem fazer todo o sentido para vc mas > para podermos ajudá-lo, essas definições devem ser quebradas nas operações > que elas implicam, aí naturalmente convergir-se-á para a formulação final > desejada. > > Por exemplo, se ClassType implica em ordem, então necessita-se de listas > ordenadas dessas classe por nest? > > Parece que a formulação para o cálculo de velocidade é mais simples quando > Se AT for >= 50 && Se o ninho for >= 1000 -> a velocidade é > c(0,diff(AT))/ > c(0,diff(days)) por days para cada nest, Que se entendida corretamente sua > explicação, significa que apenas as linhas que tenham classe "Class_0_1", > seriam usadas para esses cálculos. > > Não entendo porque é catenado um zero no num e dem dos cálculos de > velocidade . . . > > Supondo as condições para esse cálculo para classe e ninho, você consegue > escrever essa spec na linguagem R ou tem problemas com a sintaxe para > produzir o resultado? > > HTH > > > On Tue, Jun 28, 2022 at 8:49 AM Alexandre Dos Santos por (R-br) < > r-br@listas.c3sl.ufpr.br> wrote: > > > Prezados Membros do R-br, > > > > Meu dados de exemplo são: > > > > library(dplyr) > > > > my.ds <- read.csv(" > > https://raw.githubusercontent.com/Leprechault/trash/main/test_ants.csv") > > > > my.ds > > > > # days nest AT > > > > # 1 0 2 10.9200 > > > > # 2 47 2 22.8600 > > > > # 3 76 2 23.2400 > > > > # 4 0 3 0.1400 > > > > # 5 47 3 0.4800 > > > > # 6 76 3 0.8300 > > > > # 7 118 3 0.8300 > > > > # 8 160 3 0.9400 > > > > # 9 193 3 0.9400 > > > > # 10 227 3 0.9400 > > > > # 11 262 3 0.9400 > > > > # 12 306 3 0.9400 > > > > # 13 355 3 11.9300 > > > > # 14 396 3 12.8100 > > > > # 15 450 3 29.3600 > > > > # 16 0 4 1.0000 > > > > # 17 76 4 1.5600 > > > > # 18 160 4 2.8800 > > > > # 19 193 4 2.8800 > > > > # 20 227 4 2.8800 > > > > # 21 262 4 2.8800 > > > > # 22 306 4 2.8800 > > > > # 23 355 4 17.0500 > > > > # 24 0 7 11.7100 > > > > # 25 47 7 24.7900 > > > > # 26 76 7 33.1200 > > > > # 27 0 10 4.1400 > > > > # 28 47 10 6.3000 > > > > # 29 76 10 13.9400 > > > > # 30 118 10 13.3000 > > > > # 31 160 10 29.4200 > > > > # 32 193 10 29.6000 > > > > # 33 227 10 45.1500 > > > > # 34 262 10 45.1500 > > > > # 35 306 10 45.1500 > > > > # 36 355 10 70.5300 > > > > # 37 396 10 109.2600 > > > > # 38 450 10 149.2000 > > > > # 39 0 1066 0.0289 > > > > # 40 29 1066 0.0870 > > > > # 41 70 1066 0.1254 > > > > # 42 112 1066 0.1254 > > > > # 43 146 1066 0.1254 > > > > # 44 180 1066 0.1254 > > > > # 45 215 1066 0.1350 > > > > # 46 259 1066 0.1350 > > > > # 47 0 1067 0.0520 > > > > # 48 29 1067 0.1254 > > > > # 49 70 1067 0.1440 > > > > # 50 112 1067 0.2160 > > > > # 51 146 1067 0.2538 > > > > # 52 180 1067 0.2538 > > > > # 53 215 1067 0.9600 > > > > # 54 259 1067 0.9600 > > > > # 55 349 1067 0.9600 > > > > # Class size > > > > my.ds$ClassType <- cut(my.ds$AT,breaks=c(-Inf,1,2.9,8.9,24.9,49.9,Inf), > > right=FALSE, > > > > labels=c("Class_0_1","Class_1_3","Class_3_9", > > "Class_9_25","Class_25_50","Class_50")) > > > > > > Eu gostaria de calular a variável velocity com as seguintes regras: > > > > Se nest for < 1000 - considerando "Class_1_3" para "Class_50" > > > > 1.1) Se AT for < 50 > > > > 1.1.1) Se ClassType não mudar por nest durante o tempo ou AT entrar mas > > não sair do ClassType, então não calcule velocity (no meu caso nest 2 e 7 > > )., > > > > 1.1.2) Procurando o último ClassType antes de AT e calcula a `velocity` > > entre o último ClassType e o atual ClassType para nest > > > > 1.1.3) Se atrasar qualquer ClassType em "Class_1_3" para "Class_50" em > uma > > classe maior que o valor de AT no tempo 0, a classe não presente é o > valor > > de velocity do último ClassType para nest. > > 1.2) Se AT for >= 50 > > > > 1.2.1) velocity é c(0,diff(AT))/c(0,diff(days)) por days para cada nest > > Se o ninho for >= 1000 - apenas considerando "Class_0_1" > > > > 2.1) a velocidade é c(0,diff(AT))/c(0,diff(days)) por days para cada nest > > também. > > > > Meu output desejável é: > > > > # nest ClassType velocity > > > > # 3 Classe_ 1_3 0,224285714 > > > > # 3 Classe_ 3_9 0,224285714 > > > > # 3 Classe_ 9_25 0,224285714 > > > > # 3 Classe_ 9_25 0,021463415 > > > > # 3 Classe_ 9_25 0,306481481 > > > > # 4 Classe_ 1_3 0,0075 > > > > # 4 Classe_ 1_3 0,015714286 > > > > # 4 Classe_ 1_3 0 > > > > # 4 Classe_ 1_3 0 > > > > # 4 Classe_ 1_3 0 > > > > # 4 Classe_ 1_3 0 > > > > # 4 Classe_ 1_3 0,289183673 > > > > # 4 Classe_ 3_9 0,289183673 > > > > # 10 Classe_9_25 0,263448276 > > > > # 10 Classe_9_25 -0,015238095 > > > > # 10 Classe_9_25 0,383809524 > > > > # 10 Class_25_50 0,383809524 > > > > # 10 Classe_25_50 0,005454545 > > > > # 10 Class_25_50 0,457352941 > > > > # 10 Classe_25_50 0 > > > > # 10 Classe_25_50 0 > > > > # 10 Class_25_50 0,517959184 > > > > # 10 Class_50 0,517959184 > > > > # 10 Class_50 0,944634146 > > > > # 10 Class_50 0,73962963 > > > > # 1066 Classe_0_1 0,002003448 > > > > # 1066 Classe_0_1 0,000936585 > > > > # 1066 Classe_0_1 0 > > > > # 1066 Classe_0_1 0 > > > > # 1066 Classe_0_1 0 > > > > # 1066 Classe_0_1 0,000274286 > > > > # 1066 Classe_0_1 0 > > > > # 1067 Classe_0_1 0,002531034 > > > > # 1067 Classe_0_1 0,000453659 > > > > # 1067 Classe_0_1 0,001714286 > > > > # 1067 Classe_0_1 0,001111765 > > > > # 1067 Classe_0_1 0 > > > > # 1067 Classe_0_1 0.020177143 > > > > # 1067 Classe_0_1 0 > > > > # 1067 Classe_0_1 0 > > > > Por favor, alguém poderia me ajudar com isso? > > > > > > > > -- > > > > -- > > Alexandre dos Santos > > Geotechnologies and Spatial Statistics applied to Forest Entomology > > Instituto Federal de Mato Grosso (IFMT) - Campus Caceres > > Caixa Postal 244 (PO Box) > > Avenida dos Ramires, s/n - Vila Real > > Caceres - MT - CEP 78201-380 (ZIP code) > > Phone: (+55) 65 99686-6970 / (+55) 65 3221-2674 > > Lattes CV: http://lattes.cnpq.br/1360403201088680 > > OrcID: orcid.org/0000-0001-8232-6722 > > ResearchGate: www.researchgate.net/profile/Alexandre_Santos10 > > Publons: https://publons.com/researcher/3085587/alexandre-dos-santos/ > > -- > > > > _______________________________________________ > > R-br mailing list > > R-br@listas.c3sl.ufpr.br > > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > > Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça > > código mínimo reproduzível. > > > -------------- Próxima Parte ---------- > Um anexo em HTML foi limpo... > URL: < > http://listas.inf.ufpr.br/pipermail/r-br/attachments/20220628/7cd50a50/attachment-0001.htm > > > > ------------------------------ > > Subject: Legenda do Digest > > _______________________________________________ > R-br mailing list > R-br@listas.c3sl.ufpr.br > https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br > > > ------------------------------ > > Fim da Digest R-br, volume 137, assunto 6 > ***************************************** > -- -- Alexandre dos Santos Geotechnologies and Spatial Statistics applied to Forest Entomology Instituto Federal de Mato Grosso (IFMT) - Campus Caceres Caixa Postal 244 (PO Box) Avenida dos Ramires, s/n - Vila Real Caceres - MT - CEP 78201-380 (ZIP code) Phone: (+55) 65 99686-6970 / (+55) 65 3221-2674 Lattes CV: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 ResearchGate: www.researchgate.net/profile/Alexandre_Santos10 Publons: https://publons.com/researcher/3085587/alexandre-dos-santos/ --
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça código mínimo reproduzível.