it-swarm.com.de

Fehlermeldung beim Ausführen einer einfachen Umbenennungsfunktion in R

Nachfolgend ein sehr einfaches Datenrahmenbeispiel, das ich im Internet gefunden habe. Wenn Sie dies in RStudio auf meinem Computer ausführen, wird eine Fehlermeldung angezeigt: 

Fehler: Alle umzubenennenden Argumente müssen benannt werden. 

Die rename-Funktion scheint unkompliziert zu sein, funktioniert aber aus bestimmten Gründen nicht und ich kann nicht verstehen, warum.

library("dplyr")

d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
d
#   alpha beta gamma
# 1     1    4     7
# 2     2    5     8
# 3     3    6     9

rename(d, c("beta"="two", "gamma"="three"))

#Error: All arguments to rename must be named.
27
Mike

Mike, dein Befehl ist gültig, aber für "plyr" -Paket. Wenn Sie "dplyr" in das gleiche Skript laden, wird der von Ihnen erwähnte Fehler angezeigt.

Versuchen Sie es daher stattdessen:

library("plyr")
d <- data.frame(alpha=1:3, beta=4:6, gamma=7:9)
plyr::rename(d, c("beta"="two", "gamma"="three"))

Beachten Sie, dass sessionInfo() dabei hilft zu verfolgen, welche Pakete geladen (angehängt) werden.

48
Valentin

Für den vorhandenen Spaltennamen sowie den neuen Namen müssen Sie Namen ohne Anführungszeichen verwenden. Beachten Sie auch, dass der neue Name auf der linken Seite angezeigt wird.

Versuche dies:

rename(d, two = beta, three = gamma)

  alpha two three
1     1   4     7
2     2   5     8
3     3   6     9
18
Andrie

Ich hatte auch diesen Fehler, als ich rename_all für einen gruppierten Datensatz verwenden wollte.

zum Beispiel:

as_tibble( mtcars ) %>% group_by(cyl) %>% rename_all(toupper) 

wird den vom OP angegebenen Fehler erzeugen. 

Verwenden Sie zum Lösen ungroup ().

as_tibble( mtcars ) %>% group_by(cyl) %>%  ungroup() %>% rename_all(toupper) 
4
No More Hacks

Wenn Sie dplyr anstelle von plyr verwenden, unterscheidet sich die Grammatik geringfügig. Ich hatte dieses Problem und löste es mit:

df <- df %>% rename(new_name=old_name)

Oder in deinem Fall:

d <- d %>% rename(two=beta,three=gamma)
2
Bernal

Ich bin gerade selbst auf dieses Problem gestoßen und dachte, ich sollte eine Lösung teilen.

Es gibt zwei Probleme in Ihrem Code. Das erste Problem, das den Fehler verursacht, ist, dass dplyr::rename erfordert, dass die Argumente nicht als einzelne Liste, sondern als Variablen übergeben werden. Mit anderen Worten sollte es sein:

rename(d, beta = "two", gamma = "three")

Wenn Sie dies dynamisch tun möchten, können Sie do.call wie folgt verwenden:

renames <- c(beta = 'two', gamma = 'three')
do.call(dplyr::rename, c(list(d), renames))

Das andere Problem ist jedoch, dass Sie die Umbenennungen rückwärts haben. Der Schlüssel sollte der neue Spaltenname und der Wert der alte Spaltenname sein. Also möchten Sie dies stattdessen tun:

renames <- c(two = 'beta', three = 'gamma')
do.call(dplyr::rename, c(list(d), renames))

Und mit Rlang's !!! Operator:

renames <- c(two = 'beta', three = 'gamma')
dplyr::rename(d, !!!renames)

Aber auch hier können Sie das erste Beispiel verwenden, wenn Sie die Spalten im Voraus kennen.

0
Chris Middleton

Obwohl die Frage alt ist und beantwortet wurde, stand ich vor dem gleichen Problem. Durch das Installieren des Pakets "reshape" wurde das Problem für mich behoben. 

install.packages("reshape")
library(reshape)

Nun sollte der unten stehende Code gut funktionieren. 

rename(d, c(beta="two", gamma="three"))

Vielen Dank.

0
Samira Kumar