在给出列名的情况下获取R中的列号

可能重复:
从数据框中的标签获取列索引

我需要得到列名的列号。

根据我们有以下数据框:

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

我需要一个像下面这样工作的函数:

 getColumnNumber(df,"b") 

它会返回

 [1] 2 

有没有这样的function?

谢谢!

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

应该这样做。

一个快速和整洁的方法是:

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

这避免了vector扫描==which 。 如果你有很多列,并且你做了很多,那么你可能会喜欢fastmatch包 。

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

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

另一种更好地推广到非精确匹配任务的方法是使用grep

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

如果您想要删除以“b”开头的所有列名的编号,则可以这样写:

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

那整齐地发现你不能使用负向索引和字符向量的问题。

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

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

如果你使用这个子集的DF你不需要which()

 > df_sub <- df[, names(df)%in%c("b", "c")] > head(df_sub) bc 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