Mam ramkę danych („dane”) z dużą ilością kolumn. Niektóre kolumny zawierają określony ciąg („ciąg_wyszukiwania”).
Jak mogę użyć dplyr::select()
podzbioru zawierającego tylko kolumny zawierające ciąg?
Próbowałem:
# 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))])
Żadne z nich nie działa.
Wiem, że select()
akceptuje wektory numeryczne jako substytut kolumn np .:
select(data,5,7,9:20)
Ale nie wiem, jak uzyskać numeryczny wektor kolumn ID
s z mojego grepl()
wyrażenia.
Odpowiedzi:
W świecie dplyr spróbuj:
select(iris,contains("Sepal"))
Zobacz sekcję wybór w
?select
dla wielu innych pomocników podobastarts_with
,ends_with
itpźródło
select(iris, contains(".") )
Nie jestem pewien, jak masz przejść,fixed=TRUE
aby wymusić wyszukiwanie rzeczywistego"."
fixed = TRUE
czy równoważne). dplyr jest wciąż dość młody.Możesz spróbować:
select(data, matches("search_string"))
Jest bardziej ogólne niż
contains
- możesz użyć wyrażenia regularnego (np"one_string|or_the_other"
.).Więcej przykładów można znaleźć pod adresem : http://rpackages.ianhowson.com/cran/dplyr/man/select.html .
źródło
Nie ma potrzeby używania
select
po prostu użyj[
zamiast tegodata[,grepl("search_string", colnames(data))]
Spróbujmy z
iris
zestawem danych>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
źródło
dplyr
to panceum - nawet jeśli możesz to zrobićbase
, standardowa składnia nie jest tak ładna / czytelna / kompozycyjna - zobacz moją odpowiedź .W oparciu o odpowiedź Piotra Migdalsa chcę podać alternatywne rozwiązanie umożliwiające wektor ciągów:
myVectorOfStrings <- c("foo", "bar") matchExpression <- paste(myVectorOfStrings, collapse = "|") # [1] "foo|bar" df %>% select(matches(matchExpression))
Korzystanie z
OR
operatora regex (|
)UWAGA : Jeśli naprawdę masz zwykły wektor nazw kolumn (i nie potrzebujesz mocy RegExpression), zobacz komentarz pod tą odpowiedzią (ponieważ jest to czystsze rozwiązanie).
źródło
select(df, one_of(array_of_colnames))