Dúvida lógica do código R.

Boa tarde a todos!!! Dúvida boba, mas tenho de explicar antes: estou fazendo uma análise de cluster, para poder identificar resultados iguais de laboratórios analíticos. O resultado foi um banco parecido com esse reproduzível: library(dplyr) x01<-c(8.49,8.62,8.63,8.49,8.44,2) x02<-c(9.18,9.21,9.15,8.86,9.36,3)x03<-c(8.49,8.62,8.63,8.49,8.44,2)x04<-c(9.74,9.69,9.81,9.25,9.98,3)x05<-c(9.74,9.69,9.81,9.25,9.98,3)x06<-c(8.15,9.52,9.89,9.95,8.33,2)x07<-c(8.32,8.73,9.60,9.04,9.97,3)x08<-c(7.42,7.01,7.31,7.20,7.61,1)x09<-c(9.79,8.76,9.68,8.31,9.37,3)x10<-c(7.42,7.01,7.31,7.20,7.61,1) dados<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)) names(dados)<-c("v1","v2","v3","v4","v5","Cluster") Para facilitar essa identificação, ordenei os resultados por cluster, pelos dados das variáveis, e então calculei a média em cada linha: dados<-dados %>% arrange(Cluster, v1,v2,v3,v4,v5) for (i in (1:nrow(dados))){dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE)} MEU PROBLEMA: para finalmente identificar os resultados iguais, eu apliquei esse código abaixo, onde em resumo, se o cluster for igual e a média do resultado do laboratório da linha i for igual a média do resultado do laboratório da linha i+1, então ambos os laboratórios responderam resultados iguais. Apliquei o código abaixo, e ele está resultando em erro: i=1for (i in (1:nrow(dados))){if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){dados$sit[i] == "Resultado Igual"dados$sit[i+1] == "Resultado Igual"}else {}i=i+1} Alguém poderia dizer qual o meu erro? Ou se faltou algo no código? Muito agradecido pela atenção, e desculpa a extensão!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520

O código a seguir tem comentários sobre o que está incorreto. Ao final, eu posto o código que funciona. # Código antigo i=1 # o laço `for` atualiza automaticamente o contador `i`, criando cada um dos seus valores. portanto, essa linha é redundante. for (i in (1:nrow(dados))){ # o ideal é fazer `i` variar até `nrow(dados)-1`, pois `i+1`quando `i=10` extrapola o tamanho do data frame if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} # em nenhum local se define onde entra o "Resultado Diferente" else { # desnecessário } i=i+1 # linha redundante } # Código que funciona dados$sit <- "Resultado Diferente" # inicializa a coluna `sit` inteira como `Resultado Diferente` for (i in (1:(nrow(dados)-1))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] <- "Resultado Igual" # substitui apenas as posições de `sit` nas quais há resultado igual, de acordo com a condicional acima dados$sit[i+1] <- "Resultado Igual" } } Não cheguei a testar minha sugestão em casos com 3 ou mais laboratórios iguais, então não saberia te dizer se a minha solução é universal. -- Marcus Nunes Professor Adjunto https://marcusnunes.me/ Universidade Federal do Rio Grande do Norte Departamento de Estatística Laboratório de Estatística Aplicada - http://lea.estatistica.ccet.ufrn.br Curso de Big Data - https://introbigdata.org Aplicações em Shiny - http://shiny.estatistica.ccet.ufrn.br On Mon, Feb 14, 2022 at 1:50 PM Diogo Jerônimo por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Boa tarde a todos!!! Dúvida boba, mas tenho de explicar antes: estou fazendo uma análise de cluster, para poder identificar resultados iguais de laboratórios analíticos. O resultado foi um banco parecido com esse reproduzível:
library(dplyr)
x01<-c(8.49,8.62,8.63,8.49,8.44,2) x02<-c(9.18,9.21,9.15,8.86,9.36,3) x03<-c(8.49,8.62,8.63,8.49,8.44,2) x04<-c(9.74,9.69,9.81,9.25,9.98,3) x05<-c(9.74,9.69,9.81,9.25,9.98,3) x06<-c(8.15,9.52,9.89,9.95,8.33,2) x07<-c(8.32,8.73,9.60,9.04,9.97,3) x08<-c(7.42,7.01,7.31,7.20,7.61,1) x09<-c(9.79,8.76,9.68,8.31,9.37,3) x10<-c(7.42,7.01,7.31,7.20,7.61,1)
dados<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)) names(dados)<-c("v1","v2","v3","v4","v5","Cluster")
Para facilitar essa identificação, ordenei os resultados por cluster, pelos dados das variáveis, e então calculei a média em cada linha:
dados<-dados %>% arrange(Cluster, v1,v2,v3,v4,v5)
for (i in (1:nrow(dados))){ dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE) }
*MEU PROBLEMA:* para finalmente identificar os resultados iguais, eu apliquei esse código abaixo, onde em resumo, se o cluster for igual e a média do resultado do laboratório da *linha i* for igual a média do resultado do laboratório da *linha i+1*, então ambos os laboratórios responderam resultados iguais. Apliquei o código abaixo, e ele está resultando em erro:
i=1 for (i in (1:nrow(dados))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} else { } i=i+1 }
Alguém poderia dizer qual o meu erro? Ou se faltou algo no código?
Muito agradecido pela atenção, e desculpa a extensão!!!
*Diogo Jerônimo* *Bacharel em Ciências Estatísticas - ENCE/IBGE* *Mestre em Metrologia - PUC-Rio/PósMQI* *http://lattes.cnpq.br/8996149312896520 <http://lattes.cnpq.br/8996149312896520>*
_______________________________________________ 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.

Prezado professor Marcus, obrigado!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520 Em segunda-feira, 14 de fevereiro de 2022 14:12:13 BRT, Marcus Nunes <marcus.nunes@gmail.com> escreveu: O código a seguir tem comentários sobre o que está incorreto. Ao final, eu posto o código que funciona. # Código antigo i=1 # o laço `for` atualiza automaticamente o contador `i`, criando cada um dos seus valores. portanto, essa linha é redundante. for (i in (1:nrow(dados))){ # o ideal é fazer `i` variar até `nrow(dados)-1`, pois `i+1`quando `i=10` extrapola o tamanho do data frame if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} # em nenhum local se define onde entra o "Resultado Diferente" else { # desnecessário } i=i+1 # linha redundante } # Código que funciona dados$sit <- "Resultado Diferente" # inicializa a coluna `sit` inteira como `Resultado Diferente` for (i in (1:(nrow(dados)-1))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] <- "Resultado Igual" # substitui apenas as posições de `sit` nas quais há resultado igual, de acordo com a condicional acima dados$sit[i+1] <- "Resultado Igual" } } Não cheguei a testar minha sugestão em casos com 3 ou mais laboratórios iguais, então não saberia te dizer se a minha solução é universal. --Marcus NunesProfessor Adjuntohttps://marcusnunes.me/Universidade Federal do Rio Grande do NorteDepartamento de EstatísticaLaboratório de Estatística Aplicada - http://lea.estatistica.ccet.ufrn.brCurso de Big Data - https://introbigdata.org Aplicações em Shiny - http://shiny.estatistica.ccet.ufrn.br On Mon, Feb 14, 2022 at 1:50 PM Diogo Jerônimo por (R-br) <r-br@listas.c3sl.ufpr.br> wrote: Boa tarde a todos!!! Dúvida boba, mas tenho de explicar antes: estou fazendo uma análise de cluster, para poder identificar resultados iguais de laboratórios analíticos. O resultado foi um banco parecido com esse reproduzível: library(dplyr) x01<-c(8.49,8.62,8.63,8.49,8.44,2) x02<-c(9.18,9.21,9.15,8.86,9.36,3)x03<-c(8.49,8.62,8.63,8.49,8.44,2)x04<-c(9.74,9.69,9.81,9.25,9.98,3)x05<-c(9.74,9.69,9.81,9.25,9.98,3)x06<-c(8.15,9.52,9.89,9.95,8.33,2)x07<-c(8.32,8.73,9.60,9.04,9.97,3)x08<-c(7.42,7.01,7.31,7.20,7.61,1)x09<-c(9.79,8.76,9.68,8.31,9.37,3)x10<-c(7.42,7.01,7.31,7.20,7.61,1) dados<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)) names(dados)<-c("v1","v2","v3","v4","v5","Cluster") Para facilitar essa identificação, ordenei os resultados por cluster, pelos dados das variáveis, e então calculei a média em cada linha: dados<-dados %>% arrange(Cluster, v1,v2,v3,v4,v5) for (i in (1:nrow(dados))){dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE)} MEU PROBLEMA: para finalmente identificar os resultados iguais, eu apliquei esse código abaixo, onde em resumo, se o cluster for igual e a média do resultado do laboratório da linha i for igual a média do resultado do laboratório da linha i+1, então ambos os laboratórios responderam resultados iguais. Apliquei o código abaixo, e ele está resultando em erro: i=1for (i in (1:nrow(dados))){if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){dados$sit[i] == "Resultado Igual"dados$sit[i+1] == "Resultado Igual"}else {}i=i+1} Alguém poderia dizer qual o meu erro? Ou se faltou algo no código? Muito agradecido pela atenção, e desculpa a extensão!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520 _______________________________________________ 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.

Diogo, Como vc já resolveu o prob principal, faço apenas uma sugestãozinha: Este código parece-me estar *pedindo* para ser otimizado pelo uso da função rowMeans(). for (i in (1:nrow(dados))){ dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE) } Não testei, mas ficaria desta forma no seu exemplo: dados$Média <- rowMeans(dados, na.rm=TRUE) HTH -- Cesar Rabak On Mon, Feb 14, 2022 at 2:26 PM Diogo Jerônimo por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Prezado professor Marcus, obrigado!!!
*Diogo Jerônimo* *Bacharel em Ciências Estatísticas - ENCE/IBGE* *Mestre em Metrologia - PUC-Rio/PósMQI* *http://lattes.cnpq.br/8996149312896520 <http://lattes.cnpq.br/8996149312896520>*
Em segunda-feira, 14 de fevereiro de 2022 14:12:13 BRT, Marcus Nunes < marcus.nunes@gmail.com> escreveu:
O código a seguir tem comentários sobre o que está incorreto. Ao final, eu posto o código que funciona.
# Código antigo
i=1 # o laço `for` atualiza automaticamente o contador `i`, criando cada um dos seus valores. portanto, essa linha é redundante. for (i in (1:nrow(dados))){ # o ideal é fazer `i` variar até `nrow(dados)-1`, pois `i+1`quando `i=10` extrapola o tamanho do data frame if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} # em nenhum local se define onde entra o "Resultado Diferente" else { # desnecessário } i=i+1 # linha redundante }
# Código que funciona
dados$sit <- "Resultado Diferente" # inicializa a coluna `sit` inteira como `Resultado Diferente`
for (i in (1:(nrow(dados)-1))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] <- "Resultado Igual" # substitui apenas as posições de `sit` nas quais há resultado igual, de acordo com a condicional acima dados$sit[i+1] <- "Resultado Igual" } }
Não cheguei a testar minha sugestão em casos com 3 ou mais laboratórios iguais, então não saberia te dizer se a minha solução é universal. -- Marcus Nunes Professor Adjunto https://marcusnunes.me/ Universidade Federal do Rio Grande do Norte Departamento de Estatística Laboratório de Estatística Aplicada - http://lea.estatistica.ccet.ufrn.br Curso de Big Data - https://introbigdata.org Aplicações em Shiny - http://shiny.estatistica.ccet.ufrn.br
On Mon, Feb 14, 2022 at 1:50 PM Diogo Jerônimo por (R-br) < r-br@listas.c3sl.ufpr.br> wrote:
Boa tarde a todos!!! Dúvida boba, mas tenho de explicar antes: estou fazendo uma análise de cluster, para poder identificar resultados iguais de laboratórios analíticos. O resultado foi um banco parecido com esse reproduzível:
library(dplyr)
x01<-c(8.49,8.62,8.63,8.49,8.44,2) x02<-c(9.18,9.21,9.15,8.86,9.36,3) x03<-c(8.49,8.62,8.63,8.49,8.44,2) x04<-c(9.74,9.69,9.81,9.25,9.98,3) x05<-c(9.74,9.69,9.81,9.25,9.98,3) x06<-c(8.15,9.52,9.89,9.95,8.33,2) x07<-c(8.32,8.73,9.60,9.04,9.97,3) x08<-c(7.42,7.01,7.31,7.20,7.61,1) x09<-c(9.79,8.76,9.68,8.31,9.37,3) x10<-c(7.42,7.01,7.31,7.20,7.61,1)
dados<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)) names(dados)<-c("v1","v2","v3","v4","v5","Cluster")
Para facilitar essa identificação, ordenei os resultados por cluster, pelos dados das variáveis, e então calculei a média em cada linha:
dados<-dados %>% arrange(Cluster, v1,v2,v3,v4,v5)
for (i in (1:nrow(dados))){ dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE) }
*MEU PROBLEMA:* para finalmente identificar os resultados iguais, eu apliquei esse código abaixo, onde em resumo, se o cluster for igual e a média do resultado do laboratório da *linha i* for igual a média do resultado do laboratório da *linha i+1*, então ambos os laboratórios responderam resultados iguais. Apliquei o código abaixo, e ele está resultando em erro:
i=1 for (i in (1:nrow(dados))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} else { } i=i+1 }
Alguém poderia dizer qual o meu erro? Ou se faltou algo no código?
Muito agradecido pela atenção, e desculpa a extensão!!!
*Diogo Jerônimo* *Bacharel em Ciências Estatísticas - ENCE/IBGE* *Mestre em Metrologia - PUC-Rio/PósMQI* *http://lattes.cnpq.br/8996149312896520 <http://lattes.cnpq.br/8996149312896520>*
_______________________________________________ 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.
_______________________________________________ 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.

Professor César, igualmente obrigado!!! E você está absolutamente certo, antes de otimizar, descobri que o código precisava ser corrigido (vi que o resultado nessa sequência não era o que eu esperava!!!). Tive outra ideia para resolver, mas a sua é ainda mais funcional, vou testar!!! Muito obrigado!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520 Em segunda-feira, 14 de fevereiro de 2022 17:21:57 BRT, Cesar Rabak <cesar.rabak@gmail.com> escreveu: Diogo, Como vc já resolveu o prob principal, faço apenas uma sugestãozinha: Este código parece-me estar pedindo para ser otimizado pelo uso da função rowMeans(). for (i in (1:nrow(dados))){dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE)} Não testei, mas ficaria desta forma no seu exemplo: dados$Média <- rowMeans(dados, na.rm=TRUE) HTH--Cesar Rabak On Mon, Feb 14, 2022 at 2:26 PM Diogo Jerônimo por (R-br) <r-br@listas.c3sl.ufpr.br> wrote: Prezado professor Marcus, obrigado!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520 Em segunda-feira, 14 de fevereiro de 2022 14:12:13 BRT, Marcus Nunes <marcus.nunes@gmail.com> escreveu: O código a seguir tem comentários sobre o que está incorreto. Ao final, eu posto o código que funciona. # Código antigo i=1 # o laço `for` atualiza automaticamente o contador `i`, criando cada um dos seus valores. portanto, essa linha é redundante. for (i in (1:nrow(dados))){ # o ideal é fazer `i` variar até `nrow(dados)-1`, pois `i+1`quando `i=10` extrapola o tamanho do data frame if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] == "Resultado Igual" dados$sit[i+1] == "Resultado Igual"} # em nenhum local se define onde entra o "Resultado Diferente" else { # desnecessário } i=i+1 # linha redundante } # Código que funciona dados$sit <- "Resultado Diferente" # inicializa a coluna `sit` inteira como `Resultado Diferente` for (i in (1:(nrow(dados)-1))){ if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){ dados$sit[i] <- "Resultado Igual" # substitui apenas as posições de `sit` nas quais há resultado igual, de acordo com a condicional acima dados$sit[i+1] <- "Resultado Igual" } } Não cheguei a testar minha sugestão em casos com 3 ou mais laboratórios iguais, então não saberia te dizer se a minha solução é universal. --Marcus NunesProfessor Adjuntohttps://marcusnunes.me/Universidade Federal do Rio Grande do NorteDepartamento de EstatísticaLaboratório de Estatística Aplicada - http://lea.estatistica.ccet.ufrn.brCurso de Big Data - https://introbigdata.org Aplicações em Shiny - http://shiny.estatistica.ccet.ufrn.br On Mon, Feb 14, 2022 at 1:50 PM Diogo Jerônimo por (R-br) <r-br@listas.c3sl.ufpr.br> wrote: Boa tarde a todos!!! Dúvida boba, mas tenho de explicar antes: estou fazendo uma análise de cluster, para poder identificar resultados iguais de laboratórios analíticos. O resultado foi um banco parecido com esse reproduzível: library(dplyr) x01<-c(8.49,8.62,8.63,8.49,8.44,2) x02<-c(9.18,9.21,9.15,8.86,9.36,3)x03<-c(8.49,8.62,8.63,8.49,8.44,2)x04<-c(9.74,9.69,9.81,9.25,9.98,3)x05<-c(9.74,9.69,9.81,9.25,9.98,3)x06<-c(8.15,9.52,9.89,9.95,8.33,2)x07<-c(8.32,8.73,9.60,9.04,9.97,3)x08<-c(7.42,7.01,7.31,7.20,7.61,1)x09<-c(9.79,8.76,9.68,8.31,9.37,3)x10<-c(7.42,7.01,7.31,7.20,7.61,1) dados<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09,x10)) names(dados)<-c("v1","v2","v3","v4","v5","Cluster") Para facilitar essa identificação, ordenei os resultados por cluster, pelos dados das variáveis, e então calculei a média em cada linha: dados<-dados %>% arrange(Cluster, v1,v2,v3,v4,v5) for (i in (1:nrow(dados))){dados$Média[i]<-mean(dados$v1[i],dados$v2[i],dados$v3[i],dados$v4[i],dados$v5[i],na.rm = TRUE)} MEU PROBLEMA: para finalmente identificar os resultados iguais, eu apliquei esse código abaixo, onde em resumo, se o cluster for igual e a média do resultado do laboratório da linha i for igual a média do resultado do laboratório da linha i+1, então ambos os laboratórios responderam resultados iguais. Apliquei o código abaixo, e ele está resultando em erro: i=1for (i in (1:nrow(dados))){if ((dados$Cluster[i]==dados$Cluster[i+1]) & (dados$Média[i]==dados$Média[i+1])){dados$sit[i] == "Resultado Igual"dados$sit[i+1] == "Resultado Igual"}else {}i=i+1} Alguém poderia dizer qual o meu erro? Ou se faltou algo no código? Muito agradecido pela atenção, e desculpa a extensão!!! Diogo JerônimoBacharel em Ciências Estatísticas - ENCE/IBGEMestre em Metrologia - PUC-Rio/PósMQIhttp://lattes.cnpq.br/8996149312896520 _______________________________________________ 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. _______________________________________________ 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.
participantes (3)
-
Cesar Rabak
-
Diogo Jerônimo
-
Marcus Nunes