Ich habe einen Datenrahmen ("Daten") mit vielen, vielen Spalten. Einige der Spalten enthalten eine bestimmte Zeichenfolge ("search_string").
Wie kann ich dplyr::select()
eine Teilmenge angeben, die nur die Spalten enthält, die die Zeichenfolge enthalten?
Ich habe es versucht:
# columns as boolean vector
select(data, grepl("search_string",colnames(data)))
# columns as vector of column names names
select(data, colnames(data)[grepl("search_string",colnames(data))])
Keiner von ihnen arbeitet.
Ich weiß, dass select()
numerische Vektoren als Ersatz für Spalten akzeptiert werden, z.
select(data,5,7,9:20)
Aber ich weiß nicht, wie ich ID
aus meinem grepl()
Ausdruck einen numerischen Vektor von Spalten s erhalten kann.
Antworten:
Versuchen Sie in der dplyr- Welt:
select(iris,contains("Sepal"))
Siehe Abschnitt Auswahl in dem
?select
für zahlreiche andere Helfer wiestarts_with
,ends_with
usw.quelle
select(iris, contains(".") )
Nicht sicher , wie Sie sollen passierenfixed=TRUE
für eine tatsächliche zu erzwingen suchen"."
fixed = TRUE
oder das Äquivalent). dplyr ist noch ziemlich jung.Du kannst es versuchen:
select(data, matches("search_string"))
Es ist allgemeiner als
contains
- Sie können Regex verwenden (z"one_string|or_the_other"
. B. ).Weitere Beispiele finden Sie unter: http://rpackages.ianhowson.com/cran/dplyr/man/select.html .
quelle
Keine Notwendigkeit, stattdessen
select
nur zu verwenden[
data[,grepl("search_string", colnames(data))]
Versuchen wir es mit dem
iris
Datensatz>iris[,grepl("Sepal", colnames(iris))] Sepal.Length Sepal.Width 1 5.1 3.5 2 4.9 3.0 3 4.7 3.2 4 4.6 3.1 5 5.0 3.6 6 5.4 3.9
quelle
dplyr
ist ein Panceum - selbst wenn Sie es tun könnenbase
, ist die Standardsyntax nicht so schön / lesbar / zusammensetzbar - siehe meine Antwort .Basierend auf der Antwort von Piotr Migdals möchte ich eine alternative Lösung geben, die die Möglichkeit eines Vektors von Zeichenfolgen ermöglicht:
myVectorOfStrings <- c("foo", "bar") matchExpression <- paste(myVectorOfStrings, collapse = "|") # [1] "foo|bar" df %>% select(matches(matchExpression))
Verwendung des Regex-
OR
Operators (|
)ACHTUNG : Wenn Sie wirklich einen einfachen Vektor mit Spaltennamen haben (und nicht die Leistung von RegExpression benötigen), lesen Sie bitte den Kommentar unter dieser Antwort (da dies die sauberere Lösung ist).
quelle
select(df, one_of(array_of_colnames))