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 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
class
ein 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 lapply
viel sicherer.
unlist(lapply(foo, class))
ist praktisch bei Datenrahmen mit vielen Spalten.
unlist
mit lapply
ist eine schreckliche Idee, weil es möglich ist, dass length(class(x))>1
(siehe Kommentare oben) - sapply
viel sicherer ist als unlist + lapply
. Ein sicherer Weg wäresapply(lapply(foo, class), "[", 1)
Sie können einfach Funktionen verwenden lapply
oder sapply
einbauen.
lapply
wird Ihnen ein list
- zurückgeben
lapply(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.
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. 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"
sapply(foo, class)