在R中按名称查找列索引

机器算法验证 r
2022-03-14 11:50:06

在数据框中,我想按名称获取列的索引。例如:

x <- data.frame(foo=c('a','b','c'),bar=c(4,5,6),quux=c(4,5,6))

我想知道“bar”的列索引。

我想出了以下内容,但似乎不优雅。我缺少一个更直接的内置函数吗?

seq(1,length(names(x)))[names(x) == "bar"]
[1] 2
2个回答

可能这是最简单的方法:

which(names(x)=="bar")

只是为了增加另一种可能性:
您通常可以使用grep它的死者(即grepl,使用正则表达式以更复杂的方式完成这些工作。

在您的示例中,您可以通过以下方式获取列索引:

grep("^bar$", colnames(x))或者grep("^bar$", names(x))

^和分别是字符串开头和结尾$元字符。

检查 ?grep 尤其是 ?regex 以获取更多信息(即,您只能获取部分名称/匹配项,或者返回值是字符串本身或逻辑向量,...)

对我来说,grep更像是 R-ish。

与之密切相关的是 Hadley Wickhem 最近的包:stringr,一个用于“现代、一致的字符串处理”的包,包括类似 grep 的函数。他最近在 R 杂志上发表了一篇关于它的论文。

另请参阅我对相同问题的 stackoverflow 的回答。