J'ai un fichier de données avec des distances J'ai besoin de convertir ceci en un objet de classe "dist" mais je n'ai pas besoin de calculer une distance donc donc je canon utilise le dist ( ) fonction. Tout conseil? P> p>
4 Réponses :
? AS.Dist () code> devrait vous aider, bien qu'il s'attend à une matrice comme entrée. P>
Oui c'est le problème. J'ai déjà calculé la distance en utilisant ma propre fonction. Cependant, créer des dendrogrammes ou faire une PCA, etc. Nécessite un objet de distance.
Vous devez convertir vos données.frame en matricielle à l'aide de la solution que vous avez obtenue dans Ce message puis utilisez as.dist code> (vous avez besoin du triangle inférieur de la matrice)
Veuillez lire attentivement la page d'aide pour comprendre l'objet de la classe de classe.
J'ai eu un problème similaire de ne pas avoir de même temps et j'ai résolu cela comme ceci:
n <- max(table(df$site.x)) + 1 # +1, so we have diagonal of res <- lapply(with(df, split(Distance, df$site.x)), function(x) c(rep(NA, n - length(x)), x)) res <- do.call("rbind", res) res <- rbind(res, rep(NA, n)) res <- as.dist(t(res))
C'est une très belle solution merci! Juste une question. Pourquoi la dernière étiquette de la ligne est-elle supprimée et existe-t-il de toute façon que cela peut être évité? Merci encore
Un problème avec cette excellente approche est que vous devez créer la matrice de distance complète pour créer l'objet "dist" code>. C'est un peu gaspillage et
rbind () code> Les grands ensembles de données peuvent être lents. Comme vous avez déjà le vecteur de distances, et
"dist" code> Les objets de classe ne sont qu'un vecteur avec des attributs, il est plus facile et plus efficace d'ajouter directement des attributs au vecteur de distances. Voir ma réponse ci-dessous pour un exemple et des détails.
Il n'y a rien qui vous empêche de créer vous-même l'objet dist. C'est juste un vecteur de distances avec des attributs qui configurent les étiquettes, la taille, etc.
à l'aide de votre Ou vous pouvez faire cela via celles-ci donnent: p> df code>, voilà comment p>
structure () code> directement: p>
df code> dans le bon ordre comme vous le faites dans l'exemple; I.e. Trier par
Site.x CODE> TU
SITE.Y CODE> Avant d'exécuter le code I Show. P> P>
Pour les personnes qui arrivent de google ... La fonction ACAST dans la bibliothèque Reshape2 est une voie à suivre pour ce type de choses.
library(reshape2) acast(df, site.x ~ site.y, value.var='Distance', fun.aggregate = sum, margins=FALSE)