máximo e mínimo de uma matriz de distancia.

Prezados blogueiros Bom diaz Estou com uma dúvida básica no R e preciso da ajuda de vocês. Eu tenho uma matriz de distância genética entre centenas de indivíduos (parte dela abaixo) e quero identificar a combinação linha x coluna com máximo valor e a combinação linha x coluna com mínimo valor eliminando a diagonal, pois essa tem valor zero. Vamos imaginar que o mínimo é 5.075. Logo, quero saber esse valor e posição dele, por por exemplo. Os nomes da coluna e diagonal são de acesso de germoplasma. 4 5 5.075 1 2 3 4 5 1 0 86.441 63.108 120.692 21.903 2 86.441 0 7.663 39.936 39.71 3 63.108 7.663 0 30.014 32.262 4 120.692 39.936 30.014 0 97.077 5 86.463 5.358 5.075 40.632 41.155 6 58.086 22.672 5.571 20.989 43.635 7 160.623 84.723 99.275 59.463 121.871 8 149.096 78.921 107.048 104.64 94.213 Grato. Rodrigo. -- Prof. Rodrigo Oliveira de Lima Federal University of Viçosa Department of Plant Sciences Viçosa, MG, Brazil, 36570-900, Phone: +55(31)3899-2781/3247 Fax: +55(31)3899-2614 Email: rodrigoodelima@ufv.br CV: http://lattes.cnpq.br/2761299616351806

Bom dia, Se a diagonal é 0 (no exemplo passado não é), então basta ordenar os valores e escolher aquele que for o primeiro depois da diagonal. Supondo matriz m x n, basta pegar o menor entre `m` e `n` para determinar a quantidade de valores na matriz. # cria matriz do exemplo valores <- c(0, 86.441, 63.108, 120.692, 21.903, 86.441, 0, 7.663, 39.936, 39.71, 63.108, 7.663, 0, 30.014, 32.262, 120.692, 39.936, 30.014, 0, 97.077, 86.463, 5.358, 5.075, 40.632, 41.155, # este ultimo valor deveria ser 0 (zero) para cumprir a regra da diagonal zerada 58.086, 22.672, 5.571, 20.989, 43.635, 160.623, 84.723, 99.275, 59.463, 121.871, 149.096, 78.921, 107.048, 104.64, 94.213) mat <- matrix(valores, 8, byrow = TRUE) # determina menor dimensão menor_dim <- min(dim(mat)) # pega menor valor fora da diagonal menor_valor <- sort(mat)[menor_dim + 1] # Determina posição na matriz posicao <- which(mat == menor_valor) linha <- posicao %% dim(mat)[1] coluna <- (posicao %/% dim(mat)[1]) + 1 mat[linha, coluna] Para determinar o maior valor basta adicionar o argumento `decreasing = TRUE` na chamada da função `sort()` Aqui só retorna os indices de linha e coluna, mas conseguir o nome depois disso não é difícil. Att, Tomás Barcellos Em 11 de setembro de 2017 11:27, Rodrigo Lima via R-br < r-br@listas.c3sl.ufpr.br> escreveu:
Prezados blogueiros
Bom diaz Estou com uma dúvida básica no R e preciso da ajuda de vocês. Eu tenho uma matriz de distância genética entre centenas de indivíduos (parte dela abaixo) e quero identificar a combinação linha x coluna com máximo valor e a combinação linha x coluna com mínimo valor eliminando a diagonal, pois essa tem valor zero. Vamos imaginar que o mínimo é 5.075. Logo, quero saber esse valor e posição dele, por por exemplo. Os nomes da coluna e diagonal são de acesso de germoplasma. 4 5 5.075
1 2 3 4 5 1 0 86.441 63.108 120.692 21.903 2 86.441 0 7.663 39.936 39.71 3 63.108 7.663 0 30.014 32.262 4 120.692 39.936 30.014 0 97.077 5 86.463 5.358 5.075 40.632 41.155 6 58.086 22.672 5.571 20.989 43.635 7 160.623 84.723 99.275 59.463 121.871 8 149.096 78.921 107.048 104.64 94.213
Grato.
Rodrigo.
-- Prof. Rodrigo Oliveira de Lima Federal University of Viçosa Department of Plant Sciences Viçosa, MG, Brazil, 36570-900, Phone: +55(31)3899-2781 <+55%2031%203899-2781>/3247 Fax: +55(31)3899-2614 <+55%2031%203899-2614> Email: rodrigoodelima@ufv.br CV: http://lattes.cnpq.br/2761299616351806
_______________________________________________ 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 (2)
-
Rodrigo Lima
-
Tomás Barcellos