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

作为我在会话开始时运行的 oneliner 怎么样:

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

data.framed的名称和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 回答