r

grep () do wyszukiwania w nazwach kolumn ramki danych


Czy istnieje jaśniejszy, prostszy, bezpośredni i krótszy sposób, aby to zrobić:
Gdzie df1 jest ramką danych:
names(df1[grep("Yield",names(df1))])

Chcę zwrócić wszystkie nazwy kolumn, które zawierają słowo yield.
Podziękować,
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

grep
ma argument
value
, który powinien działać w tym przypadku. Próbować:
grep("Yield", names(df1), value = TRUE)


MRE
>
df1 <- data.frame( Yield_1995 = 1:5,
Yield_1996 = 6:10,
Something = letters[1:5])## Your current approach
names(df1[grep("Yield",names(df1))])
# [1] "Yield_1995" "Yield_1996"## My suggestion
grep("Yield", names(df1), value=TRUE)
# [1] "Yield_1995" "Yield_1996"

OK, więc nie wygrywa pod względem zwięzłości, ale wygrywa pod względem jasności intencji :-)
Dla odmiany… podejście „dplyr”.
library(dplyr)
names(df1 %>% select(contains("Yield")))
# [1] "Yield_1995" "Yield_1996"
names(select(df1, contains("Yield")))
# [1] "Yield_1995" "Yield_1996"
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Możesz łatwo zdefiniować własną funkcję, aby ją skrócić. Na przykład,
myfun <- function(x,y) names(y[grep(x, names(y))])

Wtedy, kiedy tego potrzebujesz, używasz
myfun("Yield", df1)

Trudno się skrócić.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się