2012-10-08 73 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:

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

其中d是你data.frame的名稱, 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$,將出現數據框中包含的變量列表。滾動這些並選擇你想要的。

相關問題