【发布时间】:2011-01-28 07:25:50
【问题描述】:
我想获取特定字母的索引,例如
> match(LETTERS,"G")
[1] NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
告诉我该字母存在,但我希望它在这种情况下为列表的第 6 个元素返回 6。
【问题讨论】:
我想获取特定字母的索引,例如
> match(LETTERS,"G")
[1] NA NA NA NA NA NA 1 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
告诉我该字母存在,但我希望它在这种情况下为列表的第 6 个元素返回 6。
【问题讨论】:
只是为了通知:我想你想要
match("G", LETTERS)
# [1] 7
与grep 或which 相比,此解决方案的好处是您可以在字母向量上使用它:
match(c("S","T","A","C","K","O","V","E","R","F","L","O","W"), LETTERS)
# gives:
# [1] 19 20 1 3 11 15 22 5 18 6 12 15 23
【讨论】:
或which:
which(LETTERS=="G")
which 函数专为此目的而设计:
给出逻辑的“TRUE”索引 对象,允许数组索引。
which 函数还可以通过将 arr.ind 参数设置为 TRUE 来返回矩阵中逻辑 TRUE 值的索引(这非常有用)。
> which(matrix(LETTERS, nrow=5)=="G")
[1] 7
> which(matrix(LETTERS, nrow=5)=="G", arr.ind=TRUE)
row col
[1,] 2 2
您可能还想阅读this recent blog post from Seth Falcon,他谈到了用 C 优化它。
【讨论】:
试试grep:
R> grep("G", LETTERS)
[1] 7
【讨论】: