library(dplyr)
x01<-c(1001,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x02<-c(2000,"Potássio",4.18,4.21,4.15,4.86,4.36,3)
x03<-c(1002,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x04<-c(1003,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x05<-c(2001,"Potássio",4.18,4.21,4.15,4.86,4.36,3)
x06<-c(2000,"Albumina",2.35,2.36,2.21,2.15,2.27,10)
x07<-c(3000,"Albumina",2.69,2.78,2.88,2.91,2.84,12)
x08<-c(2001,"Albumina",2.35,2.36,2.21,2.15,2.27,10)
x09<-c(3001,"Albumina",2.69,2.78,2.88,2.91,2.84,12)

exemplo<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09))
names(exemplo)<-c("CodCli","Substância","v1","v2","v3","v4","v5","Cluster")
row.names(exemplo)<-NULL

exemplo<-exemplo %>%
  mutate(v1=as.numeric(v1),v2=as.numeric(v2),v3=as.numeric(v3),v4=as.numeric(v4),
         v5=as.numeric(v5))

exemplo$Média<-rowMeans(exemplo[,3:7],na.rm = TRUE)

exemplo %>% pivot_longer(cols = 3:7) %>%
  group_by(Cluster, Substância, Média) %>%
  select(-value) %>%
  pivot_wider(names_from = name, values_from = CodCli) %>%
  as.data.frame() %>% pivot_longer(cols=-c(1:3)) %>% as.data.frame() %>% select(-name) %>%
  separate(value, c("x","CodCli.1","CodCli.2","CodCli.3")) %>% select(-x) %>%
  unique() %>% as.data.frame() %>% arrange(Substância)




Vê se isso ajuda...

Cid Edson Mendonça Póvoas

Engenheiro Agrônomo - Data Scientist 
CREA : 051984991-4
Técnico em Segurança do Trabalho 
Nº: 0012669/BA
Tel: +55 73 99151-9565


Em qua., 16 de fev. de 2022 às 08:47, Diogo Jerônimo por (R-br) <r-br@listas.c3sl.ufpr.br> escreveu:
Prezados, bom dia de novo, lá vou perturbar os amigos... Segue outro exemplo reproduzível (tem a ver com minha dúvida de ontem):

library(dplyr)
x01<-c(1001,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x02<-c(2000,"Potássio",4.18,4.21,4.15,4.86,4.36,3)
x03<-c(1002,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x04<-c(1003,"Potássio",3.49,3.62,3.63,3.49,3.44,2)
x05<-c(2001,"Potássio",4.18,4.21,4.15,4.86,4.36,3)
x06<-c(2000,"Albumina",2.35,2.36,2.21,2.15,2.27,10)
x07<-c(3000,"Albumina",2.69,2.78,2.88,2.91,2.84,12)
x08<-c(2001,"Albumina",2.35,2.36,2.21,2.15,2.27,10)
x09<-c(3001,"Albumina",2.69,2.78,2.88,2.91,2.84,12)

exemplo<-data.frame(rbind(x01,x02,x03,x04,x05,x06,x07,x08,x09))
names(exemplo)<-c("CodCli","Substância","v1","v2","v3","v4","v5","Cluster")
row.names(exemplo)<-NULL

exemplo<-exemplo %>%
mutate(v1=as.numeric(v1),v2=as.numeric(v2),v3=as.numeric(v3),v4=as.numeric(v4),
       v5=as.numeric(v5))

exemplo$Média<-rowMeans(exemplo[,3:7],na.rm = TRUE)

Como o de ontem, esse banco tem variáveis que identificam o código do cliente, a média dos dados (iguais entre laboratórios) e o Cluster, que foi obtido previamente. A substância é detalhe adicional.

O que eu gostaria é: reestruturar esse banco, colocando como variáveis de identificação a substância, o cluster e a média, e o código do cliente indo para as colunas, como está nessa tabela abaixo:

Subst       Cluster    Média       CodCli.1   CodCli.2   CodCli.3
Albumina 10 2,2680 2000 2001
Albumina 12 2,8200    3000 3001
Potássio 2 3,5340 1001 1002 1003
Potássio 3 4,3520 2000 2001

Eu tentei usar o comando reshape, com esse código abaixo, mas ele não funcionou comigo (tentei também o spread, do tidyr): 

exemplo<-exemplo %>%
  select(CodCli,Substância,Cluster,Média)

exemplo_quebra<-reshape(exemplo,
                                        direction="wide",
                                        idvar=c("Substância","Cluster","Média"),
                                        timevar="Cod.Cli")

Algum amigo poderia indicar onde estou errando? Ou se teria uma rotina melhor para realizar esse procedimento?

Novamente obrigado!!!

Diogo Jerônimo
Bacharel em Ciências Estatísticas - ENCE/IBGE
Mestre em Metrologia - PUC-Rio/PósMQI
_______________________________________________
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.