2016-06-16 18 views
2

I-Datenrahmen habe wie dieseSuche und Funktionen ersetzen, um Spalten zu umbenennen

> d <- data.frame(team.aaa=1:3, team.aab=4:6, team.aac=7:9) 
> d 

# team.aaa team.aab team.aac 
#1  1  4  7 
#2  2  5  8 

und gewünschten Ausgang

d <- rename(d, c("team.aaa"="aaa_team", "team.aab"="aab_team", "team.aac"="aac_team")) 
> d 
# aaa_team aab_team aac_team 
#1  1  4  7 
#2  2  5  8 
#3  3  6  9 

ich es mit Umbenennungs String tun könnte, will aber die Suche verwenden und Option ersetzen wegen des großen Datenvolumens Vielen Dank im Voraus

Antwort

2

Basierend auf dem Beispiel in der OP-Post gezeigt, scheint es, dass der Suffix Teil nach der . th sein sollte e Präfix und umgekehrt. In diesem Fall können wir sub verwenden, um die Zeichen zu erfassen, die keine . sind, gefolgt von ., dann erfassen Sie die restlichen Zeichen ((.*)) und ersetzen Sie es durch die entsprechend angeordnete Rückreferenz.

names(d) <- sub("([^.]+).(.*)", "\\2_\\1", names(d)) 
names(d) 
#[1] "aaa_team" "aab_team" "aac_team" 

Oder eine andere Möglichkeit wäre, die Zeichenfolge von . zu spalten und dann paste nach Eingang der Bestellung

sapply(strsplit(names(d), "[.]"), function(x) paste(rev(x), collapse="_")) 

Oder als @jota Umkehr in den Kommentaren erwähnt, wenn ‚Team‘ immer das erste Wort, wir können es kompakter machen mit sub

sub("team\\.(.*)", "\\1_team", names(d)) 
+0

Vielen Dank sehr viel – Jay

+1

Wenn "team" ist immer das erste Wort: 'gsub (" Team \\. (. *) "," \\ 1_team ", Namen (d), perl = TRUE)' – Jota

+0

@ Jota Vielen Dank als Sie erwähnten "Team" ist nicht immer das erste Wort, ich habe einige Spalten mit Namen wie "build_MS2_aab" meine gewünschte Ausgabe wird "aab_build_MS2" sein. Vielen Dank im Voraus – Jay