Ich habe einen Datenrahmen und eine Liste von Spalten in diesem Datenrahmen, die ich löschen möchte. Verwenden wir den iris
Datensatz als Beispiel. Ich würde gerne fallen Sepal.Length
und Sepal.Width
nur die verbleibenden Spalten verwenden. Wie mache ich das mit select
oder select_
aus dem dplyr
Paket?
Folgendes habe ich bisher versucht:
drop.cols <- c('Sepal.Length', 'Sepal.Width')
iris %>% select(-drop.cols)
Fehler in -drop.cols: Ungültiges Argument für unären Operator
iris %>% select_(.dots = -drop.cols)
Fehler in -drop.cols: Ungültiges Argument für unären Operator
iris %>% select(!drop.cols)
Fehler in! Drop.cols: ungültiger Argumenttyp
iris %>% select_(.dots = !drop.cols)
Fehler in! Drop.cols: ungültiger Argumenttyp
Ich habe das Gefühl, dass mir etwas Offensichtliches fehlt, weil dies eine ziemlich nützliche Operation zu sein scheint, die es bereits geben sollte. Auf Github hat jemand ein ähnliches Problem gepostet , und Hadley sagte, er benutze "negative Indexierung". Das habe ich versucht (glaube ich), aber ohne Erfolg. Irgendwelche Vorschläge?
iris
auf meinem tatsächlichen Datenrahmen (iris
war jedoch ein Spielzeugbeispiel). Mein Datenrahmen enthält 4558 Zeilen und 147 Spalten. Die Fehlermeldung, die ich erhalten habe, warError in eval(x$expr, data, x$env) : variable names are limited to 10000 bytes
. Irgendeine Idee, warum dies passieren könnte?select_vars
stattselect
. Jetzt funktioniert es perfekt!one_of
? Sofern mir nichts fehlt, erscheint es nicht in der Paketdokumentation (help(package='dplyr')
).help(one_of, package = "dplyr")
. Zumindest ist es in der Paketversion 0.5.0. Es ist jedoch hilfreich, die Blogs zu lesen, die Hadley veröffentlicht, wenn eines seiner Pakete aktualisiert wird. Einige Funktionen sind in anderen Funktionen dokumentiert. Leider erfordert dies das Lesen der gesamten Dokumentation, was ich meistens mache, wenn ich etwas möchte, das mit der Funktion nicht sofort offensichtlich oder möglich ist.probiere auch
quelle
Darüber hinaus
select(-one_of(drop.cols))
gibt es einige andere Optionen zum Löschen von Spalten, beiselect()
denen nicht alle spezifischen Spaltennamen definiert werden (unter Verwendung der Beispieldaten von dplyr starwars für eine größere Vielfalt an Spaltennamen):quelle
select_if(~!is.list(.))
gleichbedeutend mitselect_if(is.list(.))
?~
ist purrr eine Abkürzung für die Definition einer anonamen Funktion, es ist kein anderes Symbol für nicht. Zum Beispiel bedeuten diese beiden dasselbefunction(x) {!is.list(x)}
und~!is.list(.)
. Betrachten Sie~
als Abkürzung fürfunction(.)
.Seien Sie vorsichtig mit der
select()
Funktion, da sie sowohl im dplyr- als auch im MASS-Paket verwendet wird. Wenn also MASS geladen ist, funktioniert select () möglicherweise nicht richtig. Um herauszufinden, welche Pakete geladen werden, geben Sie sie einsessionInfo()
und suchen Sie sie im Abschnitt "Andere angehängte Pakete:". Wenn es geladen istdetach( "package:MASS", unload = TRUE )
, geben Sie ein und Ihreselect()
Funktion sollte wieder funktionieren.quelle
dplyr::select()
.dselect <- dplyr::select()
.Wir können es versuchen
quelle
dplyr
die Fähigkeit, grundlegende Analyseaufgaben einfach zu lesen und zu schreiben, bin ich jedoch enttäuscht, dass die eigentliche Lösung wie eine Problemumgehung aussieht.one_of
in der anderen Lösung der richtige Weg. Ich habe es vergessen.Eine andere Möglichkeit besteht darin, die unerwünschten Spalten zu mutieren. Dadurch werden
NULL
die eingebetteten Klammern vermieden:quelle
Wenn Sie ein Sonderzeichen in den Spaltennamen haben, entweder
select
oderselect_
möglicherweise nicht wie erwartet. Diese Eigenschaftdplyr
der Verwendung"."
. Um auf den Datensatz in der Frage zu verweisen, kann die folgende Zeile verwendet werden, um dieses Problem zu lösen:quelle
Du kannst es versuchen
quelle