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

Leo*_*Leo 69 r

假设我们有以下数据框:

> df
  A B C
1 1 2 3
2 4 5 6
3 7 8 9
Run Code Online (Sandbox Code Playgroud)

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

> df[,2]
[1] 2 5 8
Run Code Online (Sandbox Code Playgroud)

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

Hen*_*rik 100

您可以通过获得指数grepcolnames:

grep("B", colnames(df))
[1] 2
Run Code Online (Sandbox Code Playgroud)

或使用

grep("^B$", colnames(df))
[1] 2
Run Code Online (Sandbox Code Playgroud)

仅获得名为"B"的列,而不包含那些包含B的列,例如"ABC".

  • 甚至df [,grep("^ [BC]",colnames(df))],即以B或C开头的列. (2认同)

NPE*_*NPE 82

以下将这样做:

which(colnames(df)=="B")
Run Code Online (Sandbox Code Playgroud)

  • 你甚至不需要`which`.你可以直接使用`df [names(df)=="B"]` (7认同)
  • @nico问题是得到列的*索引*. (4认同)
  • `grep`的问题也是优势,即它使用正则表达式(因此你可以搜索你的colnames中的任何模式).要获得名称"B",请使用"^ B $"作为grep中的模式.^是开头的元字符,字符串结尾的$. (2认同)

chi*_*ric 7

我想查看colnames的所有索引,因为我需要进行复杂的列重新排列,所以我将colnames打印为数据帧.rownames是索引.

as.data.frame(colnames(df))

1 A
2 B
3 C
Run Code Online (Sandbox Code Playgroud)

  • 更简洁的方法是“cbind(names(df))”。 (2认同)

Gra*_*non 6

继上面嵌合体的回答之后:

为了获取df中的所有列索引,我使用了:

which(!names(df)%in%c()) 
Run Code Online (Sandbox Code Playgroud)

或存储在列表中:

indexLst<-which(!names(df)%in%c())
Run Code Online (Sandbox Code Playgroud)