根据列名称获取R中的列号

时间:2012-02-14 13:05:49

标签: r

  

可能重复:
  Get column index from label in a data frame

我需要获取给定名称的列的列号。

我们有以下数据框:

df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))

我需要一个如下所示的函数:

getColumnNumber(df,"b")

它会返回

[1] 2

有这样的功能吗?

谢谢!

4 个答案:

答案 0 :(得分:95)

which( colnames(df)=="b" )

应该这样做。

答案 1 :(得分:58)

一种快速而简洁的方法是:

> match("b",names(df))
[1] 2

这避免了==which执行的矢量扫描。如果你有很多专栏,并且你做了很多,那么你可能会喜欢fastmatch package

> require(fastmatch)
> fmatch("b",names(df))
[1] 2

fmatchmatch快,但在后续调用中,它不仅更快,而且是即时的。

答案 2 :(得分:12)

另一种更好地概括为非精确匹配任务的方法是使用grep

grep("^b$", colnames(df) )

如果您希望删除所有以“b”开头的列名称,请写下:

df[ , - grep("^b", colnames(df) )]

这样可以解决您无法使用带有字符向量的负索引的问题。

答案 3 :(得分:8)

..尤其是,如果您需要获得多个列索引,则适用以下方法:

> df <- data.frame(a=rnorm(100),b=rnorm(100),c=rnorm(100))
> which(names(df)%in%c("b", "c"))
[1] 2 3

如果您使用它来进行子集化,则不需要使用哪个()

> df_sub <- df[, names(df)%in%c("b", "c")]
> head(df_sub)
           b          c
1  0.1712754  0.3119079
2 -1.3656995  0.7111664
3 -0.2176488  0.7714348
4 -0.6599826 -0.3528118
5  0.4510227 -1.6438053
6  0.2451216  2.5305453