Angenommen, Sie haben einen data.frame wie folgt:
x <- data.frame(v1=1:20,v2=1:20,v3=1:20,v4=letters[1:20])
Wie würden Sie nur die Spalten in x auswählen, die numerisch sind?
BEARBEITEN: aktualisiert, um die Verwendung von schlecht beratenen zu vermeiden sapply
.
Da ein Datenrahmen eine Liste ist, können wir die Listenanwendungsfunktionen verwenden:
nums <- unlist(lapply(x, is.numeric))
Dann Standard-Teilmenge
x[ , nums]
## don't use sapply, even though it's less code
## nums <- sapply(x, is.numeric)
Für ein idiomatischeres modernes R würde ich jetzt empfehlen
x[ , purrr::map_lgl(x, is.numeric)]
Weniger Codey, weniger Reflexion der besonderen Macken von R und unkomplizierter und robuster für Datenbank-Back-Ended-Tibbles:
dplyr::select_if(x, is.numeric)
x[nums]
oderx[sapply(x,is.numeric)]
funktioniert auch. Und sie kehren immer zurückdata.frame
. Vergleichex[1]
vsx[,1]
- erstens istdata.frame
, zweitens ist ein Vektor. Wenn man eine Konvertierung verhindern will, muss man verwendenx[, 1, drop=FALSE]
.undefined columns selected
. Wie vermeidest du das?tryCatch()
um damit umzugehen. Bitte erwägen Sie, eine neue Frage zu öffnen.Die Funktion des dplyr-Pakets
select_if(
ist eine elegante Lösung:quelle
Filter()
aus dem Basispaket ist die perfekte Funktion für diesen Anwendungsfall: Sie müssen einfach codieren:Es ist auch viel schneller als
select_if()
:gibt (auf meinem Computer) einen Median von 60 Mikrosekunden für
Filter
und 21 000 Mikrosekunden fürselect_if
(350x schneller) zurück.quelle
Filter()
hier nicht funktioniert, ist Ersetzen, zFilter(is.numeric,iris) <- 0.5*Filter(is.numeric,iris)
. B. nicht.Wenn Sie nur an Spaltennamen interessiert sind, verwenden Sie diese:
quelle
Dies ist ein alternativer Code zu anderen Antworten:
mit einer
data.table
quelle
quelle
Die Bibliothek PCAmixdata verfügt über eine Funktion splitmix, die quantitative (numerische Daten) und qualitative (kategoriale Daten) eines bestimmten Datenrahmens "YourDataframe" wie unten gezeigt aufteilt:
quelle
Ein anderer Weg könnte wie folgt sein:
quelle
Wenn Sie viele Faktorvariablen haben, können Sie verwenden
select_if
. Installieren Sie die dplyr-Pakete. Es gibt viele Funktionen, die Daten trennen, indem sie eine Bedingung erfüllen. Sie können die Bedingungen festlegen.Verwenden Sie so.
quelle
Dies beantwortet die Frage nicht direkt, kann jedoch sehr nützlich sein, insbesondere wenn Sie so etwas wie alle numerischen Spalten mit Ausnahme Ihrer ID-Spalte und der abhängigen Variablen möchten.
quelle