在Stata中,lookfor
命令提供了一种快速搜索数据集中变量的方法(它可以搜索变量名称和标签)。因此,lookfor education
可以快速找到与教育相关的变量。 R中是否有等效的快捷功能?
答案 0 :(得分: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"
答案 1 :(得分: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)
}
}
答案 2 :(得分:0)
如果您只需搜索变量列表以找到您要查找的变量列表,则可以使用RStudio中的代码完成功能(v0.99起)。只需开始输入,您将获得可能的匹配列表。因此,在您的情况下键入education$
,将出现数据框中包含的变量列表。滚动这些并选择你想要的那个。