假设我有以下数据框:
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
。
在输入列名称向量而不是单个列名称时,我使用的上述两个示例似乎不起作用。
我知道我可以用循环来做到这一点,但有没有一种方法可以获得更好的性能?
答案 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))