8

Stata では、lookforコマンドはデータセット内の変数をすばやく検索する方法を提供します (変数名とラベルの両方を検索します)。教育に関連する変数をすばやくlookfor education見つけることができます。Rに同等のショートカット機能はありますか?

4

3 に答える 3

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"
于 2012-10-08T13:27:51.323 に答える
2

セッションの開始時に実行するワンライナーとしてこれはどうですか:

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

ddata.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)
    }
}
于 2014-10-14T11:49:00.063 に答える
0

探している変数を見つけるために変数のリストを検索するだけでよい場合は、RStudio (v0.99 以降) のコード補完機能を使用できます。入力を開始するだけで、可能な一致のリストが表示されます。したがって、あなたの場合、タイプ education$ とデータフレームに含まれる変数のリストが表示されます。これらをスクロールして、必要なものを選択します。

于 2015-07-20T13:16:20.433 に答える