2012-10-08 13 views
6

W Stata polecenie lookfor oferuje szybki sposób wyszukiwania zmiennych w zbiorze danych (i przeszukuje zarówno nazwy zmiennych, jak i etykiety). Tak więc lookfor education szybko odnajduje zmienne związane z edukacją. Czy istnieje równoważna funkcja skrótu w R?Czy istnieje szybki sposób wyszukiwania zmiennych w R?

+3

Głosowanie migrować do stackoverflow, ale można połączyć który() 'komendy' 'z nazwami()' komendy do tego, jeśli pracujesz z ramki danych, lub 'colnames()' jeśli pracujesz z matrycą – Macro

Odpowiedz

6

Możesz po prostu grep the data.frame dla potrzebnych informacji. Wtedy otrzymasz znacznie więcej informacji niż po prostu lista nazw zmiennych, dla których ktoś jest dopasowany. Można również użyć wyrażeń regularnych, zwiększając w ten sposób możliwości wyszukiwania. Oto przykład funkcji, która robi to, co chcesz (działa tylko data.frame):

lookfor <- 
function (pattern, data, ...) 
{ 
    l <- lapply(data, function(x, ...) grep(pattern, x, ...)) 
    res <- rep(FALSE, ncol(data)) 
    res[grep(pattern, names(data), ...)] <- TRUE 
    res <- sapply(l, length) > 0 | res 
    names(res) <- names(data) 
    names(res)[res] 
} 

Najpierw grep każdą kolumnę, potem grep nazwy kolumn. Następnie przechowuję tylko informacje o tym, czy grep pasuje do czegokolwiek i nagrywam je dla każdej kolumny osobno. Zamiast ... możesz przekazać dowolne argumenty do grep. Jeśli go pominiesz, ta funkcja wykona proste dopasowywanie ciągów znaków.

Oto przykład:

> dt<- data.frame(y=1:10,x=letters[1:10],a=rnorm(10)) 
> lookfor("a",dt) 
[1] "x" "a" 
2

Jak o tym jako oneliner które biegnę na początku sesji:

lkf <- function(d,p) names(d)[grep(p,names(d))] 

gdzie d jest nazwa data.frame i p to wzór.

Więc

d <- data.frame(a=letters[1:10],b=1:10,c=month.name[1:10]) 
lkf(d,'c') 
# [1] "c" 

A oto wersja, która nie wymaga przytoczyć nazwy zmiennych

lookfor <- function(string_to_find, data){ 
    # Extract the arguments and force conversion to string 
    pars <- as.list(match.call()[-1]) 
    data.name <- as.character(pars$data) 
    var <- as.character(pars$string_to_find) 

    # Regular expression search through names 
    result <- names(data)[grep(var, names(data))] 

    if(length(result) == 0) { 
     warning(paste(var, "not found in", data.name)) 
     return(NULL) 
    } 
    else { 
     return(result) 
    } 
} 
0

Jeśli wystarczy szukać chociaż wykazu zmiennych, aby znaleźć ten, który szukają, wtedy można użyć funkcji uzupełniania kodu w RStudio (od wersji 0.99). Po prostu zacznij pisać, a otrzymasz listę możliwych dopasowań. Tak więc w twoim przypadku wpisz education$ i pojawi się lista zmiennych zawartych w ramce danych. Przewiń te i wybierz ten, który chcesz.

Powiązane problemy