Stata では、lookfor
コマンドはデータセット内の変数をすばやく検索する方法を提供します (変数名とラベルの両方を検索します)。教育に関連する変数をすばやくlookfor education
見つけることができます。Rに同等のショートカット機能はありますか?
3 に答える
必要な情報については、単純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"
セッションの開始時に実行するワンライナーとしてこれはどうですか:
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)
}
}
探している変数を見つけるために変数のリストを検索するだけでよい場合は、RStudio (v0.99 以降) のコード補完機能を使用できます。入力を開始するだけで、可能な一致のリストが表示されます。したがって、あなたの場合、タイプ education$
とデータフレームに含まれる変数のリストが表示されます。これらをスクロールして、必要なものを選択します。