2012-10-08 3 views
6

Stata에서 lookfor 명령을 사용하면 데이터 세트에서 변수를 빠르게 검색 할 수 있습니다 (변수 이름과 레이블을 모두 검색). 따라서 lookfor education은 교육 관련 변수를 빠르게 찾습니다. R에 상응하는 바로 가기 기능이 있습니까?R에서 변수를 빠르게 검색 할 수 있습니까?

+3

stackoverflow로 마이 그 레이션 할 수 있지만 데이터 프레임으로 작업하는 경우'which()'명령과'names()'명령을 결합 할 수 있습니다. 작업중인 경우'colnames()' 행렬과 함께 – Macro

답변

6

간단히 grep의 data.frame을 사용하여 필요한 정보를 얻을 수 있습니다. 그러면 누군가가 매치되는 변수의 이름 목록보다 훨씬 많은 정보를 얻을 수 있습니다. 정규식을 사용하여 검색 기능을 향상시킬 수도 있습니다. 여기에 (만 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] 
} 

먼저 나는 그때 열 이름을 grep으로, 각 열을 grep을. 그런 다음 grep이 어떤 내용과도 일치하는지 여부에 대한 정보 만 유지하고 각 열에 대해 별도로 기록합니다. ... 대신 grep에 인수를 전달할 수 있습니다. 이를 생략하면이 함수는 간단한 문자열 일치를 수행합니다. 여기

은 예입니다

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

이건 어때 내가 세션의 시작에서 운영하는 oneliner으로 : d이 data.frame의 이름입니다

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

p이 패턴입니다. 여기 그래서

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

그리고

는 단지 하나를 찾아 변수 목록 불구하고 검색해야하는 경우 변수 이름

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

을 인용 할 필요가없는 버전입니다 당신 그런 다음 RStudio에서 코드 완성 기능을 사용할 수 있습니다 (v0.99 이후). 입력을 시작하기 만하면 가능한 일치 목록이 표시됩니다. 따라서 귀하의 경우 education$을 입력하면 데이터 프레임에 포함 된 변수 목록이 나타납니다. 스크롤하여 원하는 것을 선택하십시오.

관련 문제