Was ist ein einfacher Weg, um herauszufinden, welche Klasse jede Spalte in einem Datenrahmen ist?
85
Eine Option ist die Verwendung von lapply
und 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
sapply(foo, class)
class
ein Zeichenvektor aller Klassen zurückgegeben wird, von denen ein Objekt erbt, ist die Ausgabe vonsapply(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 eslapply
viel sicherer.unlist(lapply(foo, class))
ist praktisch bei Datenrahmen mit vielen Spalten.unlist
mitlapply
ist eine schreckliche Idee, weil es möglich ist, dasslength(class(x))>1
(siehe Kommentare oben) -sapply
viel sicherer ist alsunlist + lapply
. Ein sicherer Weg wäresapply(lapply(foo, class), "[", 1)
Sie können einfach Funktionen verwenden
lapply
odersapply
einbauen.lapply
wird Ihnen einlist
- zurückgebenlapply(dataframe,class)
while
sapply
wird den bestmöglichen Rückgabetyp ex nehmen. Vektor etc -sapply(dataframe,class)
Beide Befehle geben Ihnen alle Spaltennamen mit ihrer jeweiligen Klasse zurück.
quelle
Hallo suchte das gleiche, und es könnte auch sein
unlist(lapply(mtcars,class))
quelle
Sie können auch Folgendes verwenden
purrr
, dasapply
Familienfunktionen ähnelt :as.data.frame(purrr::map_chr(mtcars, class)) purrr::map_df(mtcars, class)
quelle
Ich wollte eine kompaktere Ausgabe als die oben genannten großartigen Antworten.
lapply
Hier 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"
quelle