在数据框中,我想按名称获取列的索引。例如:
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
在数据框中,我想按名称获取列的索引。例如:
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
可能这是最简单的方法:
which(names(x)=="bar")
只是为了增加另一种可能性:
您通常可以使用grep它的死者(即grepl,使用正则表达式以更复杂的方式完成这些工作。
在您的示例中,您可以通过以下方式获取列索引:
grep("^bar$", colnames(x))或者grep("^bar$", names(x))
^和分别是字符串开头和结尾的$元字符。
检查 ?grep 尤其是 ?regex 以获取更多信息(即,您只能获取部分名称/匹配项,或者返回值是字符串本身或逻辑向量,...)
对我来说,grep更像是 R-ish。
与之密切相关的是 Hadley Wickhem 最近的包:stringr,一个用于“现代、一致的字符串处理”的包,包括类似 grep 的函数。他最近在 R 杂志上发表了一篇关于它的论文。