Wie ändere ich Spaltennamen im Datenrahmen in R? [geschlossen]

9
 names(mydat)[c(name)]<-c("newname") 

Daraus weiß ich, dass der Spalten- / Variablenname "Name" des Datenrahmens mydat durch "neuer Name" ersetzt wird.

Meine Frage ist, ob ich dies durch eine Schleife tun möchte, damit ich etwas habe wie:

newname1 newname2 newname3 newname4 und so weiter, wie mache ich das?

Das hat funktioniert und es hat nicht funktioniert:

for(i in 1:4){
names(mydat)[c(name)]<-c("newname"i)
}

Gibt es eine Möglichkeit, dies zu codieren? Vielen Dank an alle, die helfen konnten. Owusu Isaac

Sohn
quelle
4
Diese Frage scheint nicht zum Thema zu gehören, da es sich lediglich um Programmierung handelt.
Gung - Reinstate Monica
Wenn Sie einige hässliche Variablennamen umbenennen müssen (z. B. abcde_1_1, abcde_2_2, abcde_3_3 ...), wie dies in einigen von Qualtrics heruntergeladenen Datensätzen häufig vorkommt: ugly_vars <- names(dplyr::select(df, starts_with("abcde_"))) names(ESM_df[ugly_vars]) <- str_c("abc_", 1:length(ugly_vars))
JetLag

Antworten:

10

Die naheliegendste Lösung wäre, Ihren Code in for-Schleife wie folgt zu ändern:

   names(mydat)[c(name)] <- paste("newname",i,sep="")

Sie müssen jedoch klarstellen, was Ihre Variable nameist. Im Moment führt diese Schleife 4 Umbenennungen der einzelnen Spalte durch.

Wenn sich die Namen, die Sie ändern möchten, im Vektor befinden, ist dies im Allgemeinen ein Standardverfahren für Teilmengen:

 names(mydat)[names(mydat)%in% names_to_be_changed] <- name_changes
mpiktas
quelle
Hallo Mpiktas, deine Lösung funktioniert hervorragend. Danke vielmals. und danke auch an alle
Sohn
1
@Owusu, der Ausdruck der Dankbarkeit auf dieser Seite ist die Aufwertung der Antworten und deren Akzeptanz. Siehe die FAQ . Wie auch immer, ich bin froh, hilfreich zu sein.
mpiktas
6

Versuchen Sie es mit sprintfoder pastewie folgt:

names(mydat)<-sprintf("name%d",1:10)

Beachten Sie auch, dass das names(mydat)[c(name)]mehr oder weniger ein Unsinn ist; c(name)ist gleichbedeutend mit dem Schreiben von just nameund bedeutet "den Wert der Variablen mit dem Namen name" abrufen; die Klammer extrahiert mindestens Elemente von, names(mydat)jedoch nur, wenn die nameVariable einen numerischen oder booleschen Index enthält.

Wenn Sie möchten , Spalten ersetzen genannt namemit name1, name2, ..., nameN, verwenden Sie etwas wie folgt aus :

names(mydat)[names(mydat)=="name"]<-sprintf("name%d",1:sum(names(mydat)=="name"))

EDIT: Nun, wenn Sie nur doppelte Spaltennamen entfernen möchten, gibt es einen noch einfacheren Weg. R hat eine make.namesFunktion, die dieses Problem behebt; es kann so verwendet werden:

names(mydat)<-make.names(names(mydat),unique=TRUE)

Noch kürzer, das gleiche kann nur durch Schreiben erhalten werden:

data.frame(mydat)->mydat #The magic is in check.names, but it is TRUE by default

quelle
@mbq, == führt eine teilweise Übereinstimmung für Zeichenfolgen durch?
mpiktas
@mpiktas Nein, aber hier wird nur eine genaue Übereinstimmung benötigt. greplwäre in Ordnung, die allgemeinere Arbeit zu erledigen.
@mbq, ja, aber das setzt voraus, dass es mehrere Spalten mit demselben Namen gibt. R erlaubt das, aber ich versuche, diese Funktion nicht zu verwenden.
mpiktas
@mpiktas Anscheinend auch das OP, also diese Frage.
@mbq danke für die Klärung der Verwechslung mit Namen (mydat) [c (name)] Seit das OP geschrieben hat, weiß ich, dass der Spalten- / Variablenname "name" ich wie "wow das ist möglich?" und versucht, auf die Namen mit Namen zuzugreifen ... dumm mich;). Darf ich demütig vorschlagen, die Frage zu bearbeiten?
steffen
5

Ich hatte das gleiche Problem und habe es mit diesem Code gelöst:

names(mydat) <- paste("newname", 1:ncol(mydat), sep="");
cuong
quelle