Vielen Dank! aber ich habe ein anderes Problem. Ich habe den Namen jeder Spalte in einem Array von Zeichen col_names []. Wie kann ich den obigen Befehl verwenden (mydf $ col_names [i]) funktioniert nicht.
Rasoul
Gibt es eine Möglichkeit, dies automatisch für alle Zeichenvariablen zu tun, wie dies data.frame mit stringsAsFactors tut?
Etienne Low-Décarie
@ EtienneLow-Décarie: nur unclassund verwenden Sie data.frameauf das Ergebnis.
IRTFM
Antworten:
196
Hallo, willkommen in der Welt von R.
mtcars #look at this built in data set
str(mtcars)#allows you to see the classes of the variables (all numeric)#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)#another approach
mtcars[,'cyl']<- as.factor(mtcars[,'cyl'])
str(mtcars)# now look at the classes
Dies funktioniert auch für Zeichen, Datumsangaben, Ganzzahlen und andere Klassen
Da Sie neu bei R sind, würde ich vorschlagen, dass Sie sich diese beiden Websites ansehen:
Vielen Dank! aber ich habe ein anderes Problem. Ich habe den Namen jeder Spalte in einem Array von Zeichen col_names []. Wie kann ich den obigen Befehl verwenden (weder mydf$col_names[i]nochmydf[,col_names[i]] funktioniert nicht.)
Rasoul
1
@Rasoul, mydf[, col_names]werde das tun
DrDom
3
+1 für die refs. Dies sind grundlegende Dinge, die in Ordnung zu fragen sind, aber es ist auch in Ordnung, sich der umfangreichen Arbeit bewusst zu sein, die in diese (und ähnliche) Arbeiten gesteckt wurde.
Roman Luštrik
84
# To do it for all names
df[]<- lapply( df, factor)# the "[]" keeps the dataframe structure
col_names <- names(df)# do do it for some names in a vector named 'col_names'
df[col_names]<- lapply(df[col_names], factor)
Erläuterung. Alle Datenrahmen sind Listen, und die Ergebnisse von [Argumenten mit mehreren Werten sind ebenfalls Listen. Daher ist das Durchlaufen von Listen die Aufgabe von lapply. Die obige Zuweisung erstellt eine Reihe von Listen, in die die Funktion data.frame.[<-erfolgreich wieder in den Datenrahmen eingefügt werden soll.df
Eine andere Strategie wäre, nur die Spalten zu konvertieren, in denen die Anzahl der eindeutigen Elemente unter einem bestimmten Kriterium liegt, beispielsweise weniger als das Protokoll der Anzahl der Zeilen als Beispiel:
Dies ist eine sehr schöne Lösung! Es kann auch mit Spaltennummern arbeiten, was besonders nützlich sein kann, wenn Sie viele, aber nicht alle ändern möchten. ZB col_nums <- c (1, 6, 7: 9, 21:23, 27:28, 30:31, 39, 49:55, 57), dann df [, col_nums] <- lapply (df [, col_nums] , Faktor).
WGray
Vorsichtsmaßnahme: Die erste Lösung funktioniert nicht, wenn length(col_names)==1. In diesem Fall df[,col_names]wird automatisch ein Vektor anstelle einer Liste mit der Länge 1 herabgestuft und lapplyversucht dann, über jeden Eintrag und nicht über die gesamte Spalte zu arbeiten. Dies kann durch Verwendung verhindert werden df[,col_names,drop=FALSE].
P Schnell
Das ist ein guter Punkt. Der andere Aufruf, der den Listenstatus beibehalten würde, ist die Verwendung df[col_names].
IRTFM
27
Sie können dplyr::mutate_if()alle Zeichenspalten konvertieren oder dplyr::mutate_at()benannte Zeichenspalten in Faktoren auswählen:
library(dplyr)# all character columns to factor:
df <- mutate_if(df, is.character, as.factor)# select character columns 'char1', 'char2', etc. to factor:
df <- mutate_at(df, vars(char1, char2), as.factor)
Wenn Sie alle Zeichenvariablen in Ihrem data.frame in Faktoren ändern möchten, nachdem Sie Ihre Daten bereits geladen haben, können Sie dies folgendermaßen in einen data.frame mit dem Namen dat:
Die vollständige Konvertierung jeder Zeichenvariablen in einen Faktor erfolgt normalerweise beim Einlesen von Daten, z. B. mit stringsAsFactors = TRUE. Dies ist jedoch nützlich, wenn Sie beispielsweise Daten read_excel()aus dem readxlPaket eingelesen haben und ein zufälliges Gesamtstrukturmodell trainieren möchten, das nicht akzeptiert wird Zeichenvariablen.
Sam Firke
13
Eine andere kurze Möglichkeit, die Sie verwenden können, ist eine Pipe ( %<>%) aus dem magrittr- Paket. Es konvertiert die Zeichenspalte mycolumn in einen Faktor.
Bitte bearbeiten Sie mit weiteren Informationen. Nur-Code- und "Versuch dies" -Antworten werden nicht empfohlen, da sie keinen durchsuchbaren Inhalt enthalten und nicht erklären, warum jemand "dies versuchen" sollte. Wir bemühen uns hier, eine Ressource für Wissen zu sein.
Brian Tompsett -
pls wenn ich es nicht für alle Spalten meines df verwenden möchte?
Mostafa
5
Ich mache es mit einer Funktion. In diesem Fall werde ich nur Zeichenvariablen in Faktoren umwandeln:
unclass
und verwenden Siedata.frame
auf das Ergebnis.Antworten:
Hallo, willkommen in der Welt von R.
Dies funktioniert auch für Zeichen, Datumsangaben, Ganzzahlen und andere Klassen
Da Sie neu bei R sind, würde ich vorschlagen, dass Sie sich diese beiden Websites ansehen:
R Referenzhandbücher: http://cran.r-project.org/manuals.html
R Referenzkarte: http://cran.r-project.org/doc/contrib/Short-refcard.pdf
quelle
mydf$col_names[i]
nochmydf[,col_names[i]]
funktioniert nicht.)mydf[, col_names]
werde das tunErläuterung. Alle Datenrahmen sind Listen, und die Ergebnisse von
[
Argumenten mit mehreren Werten sind ebenfalls Listen. Daher ist das Durchlaufen von Listen die Aufgabe vonlapply
. Die obige Zuweisung erstellt eine Reihe von Listen, in die die Funktiondata.frame.[<-
erfolgreich wieder in den Datenrahmen eingefügt werden soll.df
Eine andere Strategie wäre, nur die Spalten zu konvertieren, in denen die Anzahl der eindeutigen Elemente unter einem bestimmten Kriterium liegt, beispielsweise weniger als das Protokoll der Anzahl der Zeilen als Beispiel:
quelle
length(col_names)==1
. In diesem Falldf[,col_names]
wird automatisch ein Vektor anstelle einer Liste mit der Länge 1 herabgestuft undlapply
versucht dann, über jeden Eintrag und nicht über die gesamte Spalte zu arbeiten. Dies kann durch Verwendung verhindert werdendf[,col_names,drop=FALSE]
.df[col_names]
.Sie können
dplyr::mutate_if()
alle Zeichenspalten konvertieren oderdplyr::mutate_at()
benannte Zeichenspalten in Faktoren auswählen:quelle
Wenn Sie alle Zeichenvariablen in Ihrem data.frame in Faktoren ändern möchten, nachdem Sie Ihre Daten bereits geladen haben, können Sie dies folgendermaßen in einen data.frame mit dem Namen
dat
:Dadurch wird ein Vektor erstellt, der angibt, welche Spalten zur Klasse gehören
character
, und dannas.factor
auf diese Spalten angewendet.Beispieldaten:
quelle
stringsAsFactors = TRUE
. Dies ist jedoch nützlich, wenn Sie beispielsweise Datenread_excel()
aus demreadxl
Paket eingelesen haben und ein zufälliges Gesamtstrukturmodell trainieren möchten, das nicht akzeptiert wird Zeichenvariablen.Eine andere kurze Möglichkeit, die Sie verwenden können, ist eine Pipe (
%<>%
) aus dem magrittr- Paket. Es konvertiert die Zeichenspalte mycolumn in einen Faktor.quelle
Ich mache es mit einer Funktion. In diesem Fall werde ich nur Zeichenvariablen in Faktoren umwandeln:
quelle
[[i]]