2016-07-01 13 views
0

übereinstimmen Dies sollte etwas einfach sein, aber ich kann es nicht herausfinden.Wie Spaltenattribut in einer Datentabelle mit einem Spaltenwert in einer Nachschlagetabelle mit R

Ich habe eine Datentabelle mit N Spalten und eine Nachschlagetabelle, die zwei Spalten hat: New.Name und Number. Ich möchte die Spalten in der Datentabelle mit dem New.Name umbenennen, der in der Lookup-Tabelle gefunden wird, die mit Nummer übereinstimmt. Nicht alle Spaltennamen haben einen neuen Namen in der Nachschlagetabelle. Die Nummer in der Datentabelle wird als Spaltenattribut gespeichert. Also muss ich das column -Attribut in der Datentabelle mit dem Wert übereinstimmen, der in der Spalte Number in der Nachschlagetabelle gefunden wird.

Beispiel:

df <- as.data.frame(matrix(sample(1:20), ncol = 5)) 
colnames(df) <- c('abc', 'def', 'ghi', 'jkl', 'mno') 
for (i in 1:5) attr(df[,i], 'Number') <- i 

lookup <- data.frame(Number=c(2,3),New.Name=c('x','y')) 

Was ist der beste Weg, Spalte def und Spalte ghi auf x und y pro Beispiel oben umbenennen?

Antwort

1

Wir dies von

tun können
names(df)[match(lookup$Number, unlist(lapply(df, attributes)))] <- as.character(lookup$New.Name) 
names(df) 
#[1] "abc" "x" "y" "jkl" "mno" 
0

Gar nicht so einfach ... Vielleicht wird diese Arbeit:

colnames(df)[sapply(lookup$Number, function(x) which(sapply(df,attr, 'Number')==x))] <- as.character(lookup$New.Name) 
+0

Es ist in der Regel besser eine vorhandene Antwort zu bearbeiten und wiederherstellen, anstatt einen neuen einzugeben . –

+0

danke @MatthewLundberg, ich werde das nächste Mal tun – HubertL