返回包含多个列名称索引的列表

时间:2017-01-18 22:24:55

标签: r dataframe

假设我有以下数据框:

df <- data.frame(A = c(1, 2, 3), B = c("a", "b", "c"), C = c(4, 5, 6))

  A B C
1 1 a 4
2 2 b 5
3 3 c 6

如果我想知道列的位置,例如B列,然后我可以使用:

which(names(df)=="B")

或者

grep("B", names(df))

在这两种情况下,我得到2,但如果我想同时知道A列和C列的位置怎么办?也就是说,我想输入列名称的向量,并获得其位置的向量。因此,如果我输入"A", "C",则结果应为1 3

在输入列名称向量而不是单个列名称时,我使用的上述两个示例似乎不起作用。

我知道我可以用循环来做到这一点,但有没有一种方法可以获得更好的性能?

2 个答案:

答案 0 :(得分:3)

不需要*apply /循环。您需要match。请参阅?match处的文档。例如:

match(c("A","C"),names(df))
#[1] 1 3

其他*apply /循环解决方案在性能方面更差。

答案 1 :(得分:1)

sapply()视为内部for循环;它遍历列名列表,然后应用grep / which

sapply(vector.of.columns, function(x) which(names(df) == x))