通过名称在R中查找列索引[关闭]


11

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

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

我想知道“酒吧”的列索引。

我想出了以下内容,但看起来不太雅致。我缺少更直接的内置函数吗?

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

3
match("bar",names(x))虽然match第一个参数也是向量时,它的作用要大得多,但也可以使用。
红衣主教

您实际上是否需要该列的索引?您也可以使用x [,“ bar”]来获取整个列,类似于通常的x $ bar。在这两种情况下,都对行添加下标:x [2:3,“ bar”]或x $ bar [2:3]。如果您需要将索引提供给需要索引的例程,那当然没有帮助。
韦恩

ah,它不断弄乱我的美元符号。最重要的是,有两种方法可以使用列名“美元符号”方法并将其包括为下标。
韦恩

3
这个问题似乎离题,因为它与R中的操作方式有关,而与任何相关的统计问题无关。
gung-恢复莫妮卡

Answers:



11

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

在您的示例中,您可以使用以下内容获取列索引:

grep("^bar$", colnames(x)) 要么 grep("^bar$", names(x))

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

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

对我来说,grep是R-ish。

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

另请参阅关于同一问题的关于stackoverflow的答案。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.