2016-05-12 16 views
-2

Ich habe zwei Textdateien: ped1.txt und ped2.txt. Das Feldtrennzeichen ist Tab/Space.Werte in einer Matrix ändern

ped1.txt

222 333 444 
333 458 458 
458 774 556 
500K lines... 

ped2.txt

222 -12006 
333 -11998 

Ich brauche die Zahlen in der Datei 1 mit Schlüsseln aus der Datei 2, für alle Daten neu zu kodieren. Ergebnis sollte wie:

-12006 -11998 444 
-11998 458 458 
    458 774 556 
500K lines... 

Wie es zu tun? Danke.

+0

Können Sie ein reproduzierbares Beispiel hinzufügen? – Sotos

+1

versuch 'mapvalues' in plyr –

+0

Stammbaum umnumerieren – Andrew

Antwort

0

Mit

ped1 
# V1 V2 V3 
# 1 222 333 444 
# 2 333 458 458 
# 3 458 774 556 
ped2 
# V1  V2 
# 1 222 -12006 
# 2 333 -11998 

können Sie tun entweder:

apply(ped1, c(1,2), function(x) ifelse(x %in% ped2$V1, ped2$V2[ped2$V1 == x], x)) 
#   V1  V2 V3 
# [1,] -12006 -11998 444 
# [2,] -11998 458 458 
# [3,] 458 774 556 

oder

sapply(ped1, function(x) plyr::mapvalues(x, ped2$V1, ped2$V2, FALSE)) 
#   V1  V2 V3 
# [1,] -12006 -11998 444 
# [2,] -11998 458 458 
# [3,] 458 774 556 

je nach Ihren Vorlieben.

0

Verwenden Sie as.vector(), um die erste Matrix in einen Vektor zu konvertieren.

Dann verwenden Sie mapvalues ​​() von plyr-Paket oder vielleicht noch effizienter verwenden Sie die set() -Methode von data.table Paket. Die set() -Methode erfordert, dass Sie nach dem Konvertieren in Vektor in eine einzelne Spalte data.table umwandeln.

Wenn die Rekodierung/Ersetzungen abgeschlossen sind, können Sie zurück zur Matrix mit Methodenmatrix konvertieren (your_new_vector, ncol = original_number_of_cols).

Viel Spaß

Verwandte Themen