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-request@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-request@listas.c3sl.ufpr.br

Você poderá entrar em contato com a pessoa que gerencia a lista pelo
endereço
        r-br-owner@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.rabak@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+HHExqUDkvJSOoHs6YAA@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/
--