假设我有以下数据框:
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
Run Code Online (Sandbox Code Playgroud)
如果我想知道列的位置,例如 B 列,那么我可以使用:
which(names(df)=="B")
Run Code Online (Sandbox Code Playgroud)
或者
grep("B", names(df))
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,我都得到2,但是如果我想同时知道 A 列和 C 列的位置怎么办?也就是说,我想输入一个列名向量,并获得它们位置的向量。所以,如果我输入"A", "C",结果应该是1 3。
当输入列名称向量而不是单个列名称时,我使用的上述两个示例似乎不起作用。
我知道我可以用循环来做到这一点,但是有没有一种方法可以实现更好的性能?
不需要*apply/循环。你需要match. 请参阅 中的文档?match。例如:
match(c("A","C"),names(df))
#[1] 1 3
Run Code Online (Sandbox Code Playgroud)
其他*apply/loops 解决方案在性能方面更差。