В Stata команда lookfor
предлагает быстрый способ поиска переменных в наборе данных (и ищет как имена переменных, так и метки). Таким образом lookfor education
быстро находит вам переменные, связанные с образованием. Есть ли в R эквивалентная функция быстрого доступа?
Есть ли быстрый способ поиска переменных в 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
. Если вы его опустите, эта функция выполнит простое сопоставление строк.
Вот пример:
> 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
- шаблон.
So
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 (начиная с версии 0.99). Просто начните печатать, и вы получите список возможных совпадений. Итак, в вашем случае введите education$
, и появится список переменных, содержащихся во фрейме данных. Прокрутите их и выберите тот, который вам нужен.
which()
с командойnames()
для этого, если вы работаете с фреймом данных, илиcolnames()
, если вы работаете с матрицей - person Macro   schedule 08.10.2012