J'ai des problèmes de sous-formement de données.Frame basé sur la réciprocité des valeurs dans la ligne et la colonne.
Voici un exemple DF pour illustrer le problème: p> sortie: p> Je tiens à sous-ensemble Ce DF en gardant uniquement les lignes qui ont des valeurs réciproques. P> Le sous-ensemble résultant doit ressembler à ceci: P> rater ratee
1 21 24
4 24 21
5 Réponses :
Nous pouvions trier par rangée puis utiliser dupliqué code>
C'est bien! J'ai essayé de penser à utiliser la dupliquée pour le problème. Cela fonctionne bien! Merci!
@SekingData Si cette réponse vous aide, vous pouvez l'accepter :)
J'aimerais pouvoir accepter les deux. Merci, akrun!
Une autre possibilité: ou ceci, pour une raison quelconque, il est deux fois plus rapide sur votre petit exemple (bien que plus lent que la solution d'Akrun): p> Pour conserver la deuxième solution flexible avec vos colonnes supplémentaires: P> merge(rating.data,setNames(rating.data[,c("rater","ratee")],c("ratee","rater")))
Merci! C'est en fait ce que je cherchais comme je ne voulais pas perdre le reste du DF. Cela me permet de spécifier les colonnes que j'ai à l'esprit. Merci de lire mon esprit!
De rien, la solution d'Akrun pourrait facilement être adaptée si vous venez de mettre note.data [ c ("rater", "notete")] code> dans la première ligne, il pourrait être plus rapide aussi Si c'est une préoccupation.
library(data.table) N=10#number of rows dt1<-data.table(a=1:N,b=sample(N))#create the data.table that holds the info dt1[,d:=ifelse(a<b,paste0(a,"_",b),paste0(b,"_",a))]#create unique key per pair respecting the rule "min_max" setkey(dt1,d)#setting the key dt1[dt1[,.N,d][N!=1],.(a,b)] #keep only the pairs that appear more than once
Semblable dans l'esprit de la méthode d'Akrun, Rbind Code> Les données.frame à une copie avec les colonnes inversées. Trouvez des doublons, à partir du bas, qui retournera alors vrai pour les lignes dans les données d'origine. Sous-ensemble ce vecteur logique avec
[SEQ_LEN (nrow (note.data))] code> Pour renvoyer un vecteur de la longueur appropriée à
[ code> afin de sous-ensemble sur les lignes.
rating.data[duplicated(rbind(rating.data,
unname(unclass(rating.data[2:1]))),
fromLast=TRUE)[seq_len(nrow(rating.data))],]
rater ratee
1 21 24
4 24 21
Vous pouvez également utiliser PMIN code> et
Pmax code> pour aider avec le regroupement, puis filtrer sur tous les groupes ayant plus d'une entrée, c'est-à-dire
# A tibble: 2 x 2
rater ratee
<dbl> <dbl>
1 21 24
2 24 21
J'ai pensé à l'approche PMIN / PMAX CODE>. Ce serait plus rapide
Vous utilisez le mot réciproque à tort. 1 / x est la valeur réciproque de x.
Voulez-vous vous retrouver avec une matrice symétrique ???
Stackoverflow .com / questions / 28574006 / ... Vérifiez également le lien
J'ai une matrice d'utiliser l'emballage iGraph, une matrice d'adjacence. Ce paquet ne peut fournir qu'un rapport entre les valeurs réciproques. J'utilise la langue qu'ils utilisaient pour l'analyse du réseau.