Ich habe ein Wörterbuch (Tabelle Tabelle mit 2 Spalten), wo einige der Werte mit einigen der Schlüssel übereinstimmen. In diesen Situationen möchte ich die Werte durch den Wert des Schlüssels ersetzen, auf den sie zeigen.R Eliminierung mehrerer Lookups in einem Wörterbuch
Beispiel:
Key, Value
"aa", "ac"
"ab", "ba"
"ac", "ad"
"ad", "da"
"ae", "ac"
Was ich versuche zu produzieren:
Key, Value
"aa", "da"
"ab", "ba"
"ac", "da"
"ad", "da"
"ae", "da"
Was ich versucht habe: nur
dict <- data.frame(key=c("aa","ab","ac","ad","ae"),value=c("ac","ba","ad","da","ac"))
repeat {
needs_replacing <- dict[dict$Value %in% dict$Key,]
if(nrow(needs_replacing) == 0) {
break;
}
replacements <- dict[dict$Key %in% needs_replacing$Value,]
dict[dict$Value %in% dict$Key,]$Value <- replacements[?????,]$Value
}
Das Problem, das ich habe, ist, dass replacements
hat drei Werte in der ersten Iteration, aber ich versuche, sie zu erweitern, um vier Werte zu ersetzen. Ich weiß, dass Sie es mit Indizes unterteilen können, aber sie zu bekommen ist eine Art von Schmerz, und ich bin mir nur nicht sicher, ob es einen besseren Weg gibt, um das zu erreichen, was ich versuche.
Sollten nicht die ersten und letzten Werte in der Ausgabe "Value" "ad" sein? –
Nein, der springende Punkt ist, es wiederholt zu tun, um alle Ketten zu glätten und nur eine einzige Suche zu haben. aa -> ac -> ad -> da, also sollten alle Schlüssel in der Kette direkt auf das Ende der Kette zeigen –
Ich sehe. Vielleicht suchen Sie nach einem der Link-Pakete, leider, –