[R-br] Criação de uma função complexa com dplyr

Alexandre Dos Santos alexandre.santos em cas.ifmt.edu.br
Ter Jun 28 08:49:13 -03 2022


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/
--
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20220628/809dbfa4/attachment.htm>


Mais detalhes sobre a lista de discussão R-br