Programmatisch (z. B. sapply(..., class))oder interaktiv (z. B. str(...)) oder beides? Es ist im Allgemeinen skalierbarer, dies programmgesteuert zu tun. Dann können Sie Filter(...)die Liste für Ganzzahlen, Zeichen, Faktoren usw. beliebig erstellen. Oder Sie können daraus Spaltentypen grep/greplableiten, names(...)wenn sie Namenskonventionen folgen
smci
@smci: Ich habe in meiner ursprünglichen Frage nicht nach 'programmatisch' gefragt. Ich weiß nicht, warum Sie die gesamte Art meiner Frage ändern würden.
stackoverflowuser2010
ok, es wurde zurückgerollt. Es hat nicht die ganze Natur verändert, es hat es in eine von zwei Richtungen geklärt. Interaktive Ansätze str(...)sind nicht skalierbar und haben bei <100 Spalten keinen Dampf mehr.
smci
Antworten:
213
Am besten starten Sie mit ?str(). Um einige Beispiele zu untersuchen, machen wir einige Daten:
set.seed(3221)# this makes the example exactly reproducible
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE,TRUE,FALSE,FALSE,FALSE),
X3=letters[1:5])
Die Lösung von @Wilmer E Henao H ist sehr rationalisiert:
sapply(my.data, class)
y x1 x2 X3
"numeric""integer""logical""factor"
Wenn str()Sie verwenden, erhalten Sie diese Informationen sowie zusätzliche Extras (z. B. die Ebenen Ihrer Faktoren und die ersten Werte jeder Variablen):
str(my.data)'data.frame':5 obs. of 4 variables:$ y : num 1.031.599-0.8180.872-2.682$ x1: int 12345$ x2: logi TRUETRUEFALSEFALSEFALSE$ X3: Factor w/5 levels "a","b","c","d",..:12345
Der Ansatz von @Gavin Simpson ist ebenfalls optimiert, bietet jedoch etwas andere Informationen als class():
sapply(my.data, typeof)
y x1 x2 X3
"double""integer""logical""integer"
Nachdem ich R einige Monate lang verwendet habe, habe ich festgestellt, dass dies str(dataframe)der schnellste Weg ist, um die Spaltentypen auf einen Blick zu bestimmen. Die anderen Ansätze erfordern mehr Tastenanschläge und zeigen nicht so viele Informationen an. Sie sind jedoch hilfreich, wenn die Spaltendatentypen eine Eingabe für andere Funktionen sind.
stackoverflowuser2010
Hallo, als ich das gleiche mit bewerben statt bewerben tat, hat es nicht funktioniert
Dom Jo
@ DomJo, warum würdest du verwenden apply()? Das ist für Matrizen. Ein Datenrahmen ist eine (spezielle) Liste.
gung - Monica
50
sapply(yourdataframe, class)
Wobei Ihr Datenrahmen der Name des von Ihnen verwendeten Datenrahmens ist
wenn Sie die tatsächlichen Typen der Vektoren im Datenrahmen benötigen. class()ist etwas von einem anderen Tier.
Wenn Sie diese Informationen nicht als Vektor abrufen müssen (dh wenn Sie sie später nicht programmgesteuert ausführen müssen), verwenden Sie einfach str(foo).
In beiden Fällen foowürde durch den Namen Ihres Datenrahmens ersetzt.
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
*<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>12161601103.92.6216.5014422161601103.92.8817.00144322.84108933.852.3218.61141
Für große Datenrahmen:
glimpse(mtcars)
gibt Ihnen eine strukturierte Ansicht der Datentypen:
Observations:32
Variables:11$ mpg <dbl>21.0,21.0,22.8,21.4,18.7,18.1,14.3,24.4,22.8,19.2,17.8,16.4,17....$ cyl <dbl>6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,...$ disp <dbl>160.0,160.0,108.0,258.0,360.0,225.0,360.0,146.7,140.8,167.6,167.6...$ hp <dbl>110,110,93,110,175,105,245,62,95,123,123,180,180,180,205,215...$ drat <dbl>3.90,3.90,3.85,3.08,3.15,2.76,3.21,3.69,3.92,3.92,3.92,3.07,3.0...$ wt <dbl>2.620,2.875,2.320,3.215,3.440,3.460,3.570,3.190,3.150,3.440,3.440...$ qsec <dbl>16.46,17.02,18.61,19.44,17.02,20.22,15.84,20.00,22.90,18.30,18.90...$ vs <dbl>0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,...$ am <dbl>1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,...$ gear <dbl>4,4,4,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,...$ carb <dbl>4,4,1,1,2,1,4,2,2,4,4,3,3,3,4,4,4,1,2,1,1,2,2,4,2,...
So erhalten Sie eine Liste des Datentyps der Spalten (wie oben von @Alexandre angegeben):
konvertiert Spalten mpgund amin Zeichen und die Spalte carbin Ganzzahl:
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr><dbl><int>12161601103.92.6216.5014422161601103.92.8817.00144322.84108933.852.3218.61141421.462581103.083.2219.41031
Hier ist eine Funktion, die Teil des helpRFunctions- Pakets ist und eine Liste aller verschiedenen Datentypen in Ihrem Datenrahmen sowie die spezifischen Variablennamen zurückgibt , die diesem Typ zugeordnet sind.
install.package('devtools')# Only needed if you dont have this installed.
library(devtools)
install_github('adam-m-mcelhinney/helpRFunctions')
library(helpRFunctions)
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE,TRUE,FALSE,FALSE,FALSE),
X3=letters[1:5])
t <- list.df.var.types(my.data)
t$factor
t$integer
t$logical
t$numeric
Sie könnten dann so etwas tun var(my.data[t$numeric]).
sapply(..., class))
oder interaktiv (z. B.str(...)
) oder beides? Es ist im Allgemeinen skalierbarer, dies programmgesteuert zu tun. Dann können SieFilter(...)
die Liste für Ganzzahlen, Zeichen, Faktoren usw. beliebig erstellen. Oder Sie können daraus Spaltentypengrep/grepl
ableiten,names(...)
wenn sie Namenskonventionen folgenstr(...)
sind nicht skalierbar und haben bei <100 Spalten keinen Dampf mehr.Antworten:
Am besten starten Sie mit
?str()
. Um einige Beispiele zu untersuchen, machen wir einige Daten:Die Lösung von @Wilmer E Henao H ist sehr rationalisiert:
Wenn
str()
Sie verwenden, erhalten Sie diese Informationen sowie zusätzliche Extras (z. B. die Ebenen Ihrer Faktoren und die ersten Werte jeder Variablen):Der Ansatz von @Gavin Simpson ist ebenfalls optimiert, bietet jedoch etwas andere Informationen als
class()
:Für weitere Informationen über
class
,typeof
und das mittleren Kind,mode
sehen, diesen ausgezeichneten SO thread: Eine umfassende Übersicht über die Arten von Dingen in R. ‚Mode‘ und ‚Klasse‘ und ‚typeof‘ unzureichend ist .quelle
str(dataframe)
der schnellste Weg ist, um die Spaltentypen auf einen Blick zu bestimmen. Die anderen Ansätze erfordern mehr Tastenanschläge und zeigen nicht so viele Informationen an. Sie sind jedoch hilfreich, wenn die Spaltendatentypen eine Eingabe für andere Funktionen sind.apply()
? Das ist für Matrizen. Ein Datenrahmen ist eine (spezielle) Liste.Wobei Ihr Datenrahmen der Name des von Ihnen verwendeten Datenrahmens ist
quelle
ich würde vorschlagen
wenn Sie die tatsächlichen Typen der Vektoren im Datenrahmen benötigen.
class()
ist etwas von einem anderen Tier.Wenn Sie diese Informationen nicht als Vektor abrufen müssen (dh wenn Sie sie später nicht programmgesteuert ausführen müssen), verwenden Sie einfach
str(foo)
.In beiden Fällen
foo
würde durch den Namen Ihres Datenrahmens ersetzt.quelle
Übergeben Sie einfach Ihren Datenrahmen in die folgende Funktion:
um ein Diagramm aller Datentypen in Ihrem Datenrahmen zu erstellen. Für den Iris- Datensatz erhalten wir Folgendes:
quelle
Für kleine Datenrahmen:
gibt Ihnen einen Ausdruck des df mit Datentypen
Für große Datenrahmen:
gibt Ihnen eine strukturierte Ansicht der Datentypen:
So erhalten Sie eine Liste des Datentyps der Spalten (wie oben von @Alexandre angegeben):
gibt eine Liste der Datentypen:
So ändern Sie den Datentyp einer Spalte:
konvertiert Spalten
mpg
undam
in Zeichen und die Spaltecarb
in Ganzzahl:quelle
Da es nicht klar angegeben wurde, füge ich einfach Folgendes hinzu:
Ich suchte nach einer Möglichkeit, eine Tabelle zu erstellen , die die Anzahl der Vorkommen aller Datentypen enthält .
Angenommen, wir haben eine
data.frame
mit zwei numerischen und einer logischen SpalteDamit können Sie die Anzahl der Spalten jedes Datentyps zusammenfassen
Dies ist äußerst praktisch, wenn Sie viele Spalten haben und sich einen schnellen Überblick verschaffen möchten.
Um Anerkennung zu geben: Diese Lösung wurde von der Antwort von @Cybernetic inspiriert .
quelle
Hier ist eine Funktion, die Teil des helpRFunctions- Pakets ist und eine Liste aller verschiedenen Datentypen in Ihrem Datenrahmen sowie die spezifischen Variablennamen zurückgibt , die diesem Typ zugeordnet sind.
Sie könnten dann so etwas tun
var(my.data[t$numeric])
.Hoffe das ist hilfreich!
quelle
lapply(your_data, class)
mit etwas zusätzlicher Verarbeitung für die Formatierung verbunden ist.Wenn Sie die CSV-Datei als data.frame (und nicht als Matrix) importieren, können Sie sie auch verwenden
summary.default
quelle
Eine weitere Option ist die Verwendung der Map-Funktion des Purrr-Pakets.
quelle