从数据框中的标签获取列索引

时间:2010-12-13 09:09:32

标签: r

假设我们有以下数据框:

> df
  A B C
1 1 2 3
2 4 5 6
3 7 8 9

我们可以从索引中选择列'B':

> df[,2]
[1] 2 5 8

有没有办法从列标签('B')获取索引(2)?

8 个答案:

答案 0 :(得分:95)

您可以通过grepcolnames获取索引:

grep("B", colnames(df))
[1] 2

或使用

grep("^B$", colnames(df))
[1] 2

仅获取名为" B"的列没有包含B的那些" ABC"

答案 1 :(得分:79)

以下将会这样做:

which(colnames(df)=="B")

答案 2 :(得分:7)

我想查看colnames的所有索引,因为我需要做一个复杂的column rearrangement,所以我将colnames打印为数据帧。 rownames是索引。

as.data.frame(colnames(df))

1 A
2 B
3 C

答案 3 :(得分:2)

这似乎是列出具有列号的变量的有效方法:

<head>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-slider/10.0.2/bootstrap-slider.min.js"></script>
</head>

输出:

cbind(names(df)) 

有时我喜欢将带位置的变量复制到我的代码中,所以我使用了这个函数:

     [,1]
[1,] "A" 
[2,] "B" 
[3,] "C" 

输出:

varnums<- function(x) {w=as.data.frame(c(1:length(colnames(x))),
          paste0('# ',colnames(x)))
names(w)= c("# Var/Pos")
w}
varnums(df)

答案 4 :(得分:2)

接着上面的 chimeric's 回答:我还需要获取 df 中的 all 列索引,所以我使用了:

which(!names(df)%in%c()) 

或存储在列表中

indexLst<-which(!names(df)%in%c())

答案 5 :(得分:0)

使用t函数:

t(colnames(df))

     [,1]   [,2]   [,3]   [,4]   [,5]   [,6]  
[1,] "var1" "var2" "var3" "var4" "var5" "var6"

答案 6 :(得分:0)

match(“ B”,names(df))

如果有名称向量,也可以使用。

答案 7 :(得分:0)

这是一个可以概括 Henrik 答案的答案。

df=data.frame(A=rnorm(100), B=rnorm(100), C=rnorm(100))
numeric_columns<-c('A', 'B', 'C')
numeric_index<-sapply(1:length(numeric_columns), function(i)
grep(numeric_columns[i], colnames(df)))