Função para criar agrupamento de variáveis em função do valor de p

Prezados Listeiros, Gostaria de uma ajuda do grupo para criação de uma função para criação de uma variável dados$groups, em função da significância de res$aov.tab$Pr=> 0.05, de maneira que níveis de fatores iguais serão fundidos, como no exemplo abaixo onde trat1 e trat2 são iguais e vão ficar trat1_trat2, e os não significativos ficam do mesmo jeito, sem alteração. O output desejado esta no final do meu CRM, não estou conseguindo chegar a resultados satisfatórios com a função ifelse (res$aov.tab$Pr=> 0.05) { ... Alguém teria alguma sugestão? ### <code r> require(vegan) #Fator trat <- gl(3, 15, labels = paste("t", 1:3, sep="")) # Variáveis resposta set.seed(124) sp <- cbind(c(rnorm(10, 5, 0.25), rnorm(35, 5, 0.25)), rnorm(45, 2.5, 0.25), c(rnorm(10, 4.5, 0.25), rnorm(35, 5, 0.25)), rnorm(45, 5, 0.25)) colnames(sp) <- c("sp1", "sp2", "sp3", "sp4") #Comparações contrasts(trat) <- cbind(c(0,1,0),c(0,0,1)) trat_c <- model.matrix(~ trat)[, -1] trat1_trat2 <- trat_c[, 1] trat1_trat3 <- trat_c[, 2] res <- adonis(sp ~ trat1_trat2 + trat1_trat3, method = "euclidean", perm = 999) res # Tentativa de função ifelse (res$aov.tab$Pr=> 0.05) { dados$groups = ## dificultade aqui para agrupar os fatores não significativos , dados$groups = dados$trat } # Output desejado trat sp1 sp2 sp3 sp4 groups [1,] 1 4.653732 2.490977 4.236323 5.382113 trat1_trat2 [2,] 1 5.009581 2.254713 4.604529 4.842553 trat1_trat2 [3,] 1 4.809242 2.391435 4.675318 4.732977 trat1_trat2 [4,] 1 5.053077 2.483129 4.561690 5.311215 trat1_trat2 [5,] 1 5.356384 2.745474 4.616074 5.114969 trat1_trat2 ... # Obrigado, -- ====================================================================== Alexandre dos Santos Proteção Florestal IFMT - Instituto Federal de Educação, Ciência e Tecnologia de Mato Grosso Campus Cáceres Caixa Postal 244 Avenida dos Ramires, s/n Bairro: Distrito Industrial Cáceres - MT CEP: 78.200-000 Fone: (+55) 65 8132-8112 (TIM) (+55) 65 9686-6970 (VIVO) e-mails:alexandresantosbr@yahoo.com.br alexandre.santos@cas.ifmt.edu.br Lattes: http://lattes.cnpq.br/1360403201088680 OrcID: orcid.org/0000-0001-8232-6722 Researchgate: https://www.researchgate.net/profile/Alexandre_Santos10 LinkedIn: https://br.linkedin.com/in/alexandre-dos-santos-87961635 ======================================================================

Prezados Listeiros,
Gostaria de uma ajuda do grupo para criação de uma função para criação de uma variável dados$groups, em função da significância de res$aov.tab$Pr=> 0.05, de maneira que níveis de fatores iguais serão fundidos, como no exemplo abaixo onde trat1 e trat2 são iguais e vão ficar trat1_trat2, e os não significativos ficam do mesmo jeito, sem alteração. O output desejado esta no final do meu CRM, não estou conseguindo chegar a resultados satisfatórios com a função ifelse (res$aov.tab$Pr=> 0.05) { ... Alguém teria alguma sugestão?
### <code r> require(vegan)
#Fator trat <- gl(3, 15, labels = paste("t", 1:3, sep=""))
# Variaveis resposta set.seed(124) sp <- cbind(c(rnorm(10, 5, 0.25), rnorm(35, 5, 0.25)), rnorm(45, 2.5, 0.25), c(rnorm(10, 4.5, 0.25), rnorm(35, 5, 0.25)), rnorm(45, 5, 0.25)) colnames(sp) <- c("sp1", "sp2", "sp3", "sp4") dados<-cbind(trat,sp)
#Comparações contrasts(trat) <- cbind(c(0,1,0),c(0,0,1)) trat_c <- model.matrix(~ trat)[, -1] trat1_trat2 <- trat_c[, 1] trat1_trat3 <- trat_c[, 2]
res <- adonis(sp ~ trat1_trat2 + trat1_trat3, method = "euclidean", perm = 999) res
step1<-gsub("[:punct:]*(sp ~)"," ",res$call[2]) step2<-as.factor(chartr("+", " ", step1))
# Tentativa de função for(i in step2){
if (res$aov.tab$Pr>=0.05) { dados$groups = step2[i] } else { dados$groups = dados$trat } } head(dados) # # trat sp1 sp2 sp3 sp4 groups [1,] 1 4.653732 2.490977 4.236323 5.382113 trat1_trat2 [2,] 1 5.009581 2.254713 4.604529 4.842553 trat1_trat2 [3,] 1 4.809242 2.391435 4.675318 4.732977 trat1_trat2 [4,] 1 5.053077 2.483129 4.561690 5.311215 trat1_trat2 [5,] 1 5.356384 2.745474 4.616074 5.114969 trat1_trat2 ... #
Obrigado,
participantes (1)
-
ASANTOS