Was ist ein einfacher Weg, um herauszufinden, welche Klasse jede Spalte in einem Datenrahmen ist?
Was ist ein einfacher Weg, um herauszufinden, welche Klasse jede Spalte in einem Datenrahmen ist?
Antworten:
Eine Option ist die Verwendung von lapplyund class. Zum Beispiel:
> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"
$SomeNumeric
[1] "numeric"
Eine weitere Option ist str:
> str(foo)
'data.frame': 2 obs. of 2 variables:
$ SomeFactor : Factor w/ 2 levels "a","b": 1 2
$ SomeNumeric: num 1 2
classein Zeichenvektor aller Klassen zurückgegeben wird, von denen ein Objekt erbt, ist die Ausgabe von sapply(foo, class)möglicherweise eine Liste und nicht immer ein Zeichenvektor, wie die meisten Leute erwarten würden. Was ein bisschen gefährlich sein kann ... Ich finde es lapplyviel sicherer.
unlist(lapply(foo, class))ist praktisch bei Datenrahmen mit vielen Spalten.
unlistmit lapplyist eine schreckliche Idee, weil es möglich ist, dass length(class(x))>1 (siehe Kommentare oben) - sapplyviel sicherer ist als unlist + lapply. Ein sicherer Weg wäresapply(lapply(foo, class), "[", 1)
Sie können einfach Funktionen verwenden lapplyoder sapplyeinbauen.
lapplywird Ihnen ein list- zurückgeben
lapply(dataframe,class)
while sapplywird den bestmöglichen Rückgabetyp ex nehmen. Vektor etc -
sapply(dataframe,class)
Beide Befehle geben Ihnen alle Spaltennamen mit ihrer jeweiligen Klasse zurück.
Hallo suchte das gleiche, und es könnte auch sein
unlist(lapply(mtcars,class))
Ich wollte eine kompaktere Ausgabe als die oben genannten großartigen Antworten. lapplyHier ist eine Alternative, die als kleine Funktion verpackt ist.
# Example data
df <-
data.frame(
w = seq.int(10),
x = LETTERS[seq.int(10)],
y = factor(letters[seq.int(10)]),
z = seq(
as.POSIXct('2020-01-01'),
as.POSIXct('2020-10-01'),
length.out = 10
)
)
# Function returning compact column classes
col_classes <- function(df) {
t(as.data.frame(lapply(df, function(x) paste(class(x), collapse = ','))))
}
# Return example data's column classes
col_classes(df)
[,1]
w "integer"
x "character"
y "factor"
z "POSIXct,POSIXt"
sapply(foo, class)