【发布时间】:2013-08-11 13:23:47
【问题描述】:
我需要效率来查找两个向量之间的索引(而不是逻辑向量)。我可以这样做:
which(c("a", "q", "f", "c", "z") %in% letters[1:10])
同理最好用which.max找到最大数的位置:
which(c(1:8, 10, 9) %in% max(c(1:8, 10, 9)))
which.max(c(1:8, 10, 9))
我想知道我是否有最有效的方法来找到 2 个向量中匹配项的位置。
编辑: 根据下面的问题/cmets。我正在对向量列表进行操作。该问题涉及对已分解成单词袋的句子进行操作,如下所示。该列表可能包含 10000-20000 个或更多字符向量。然后根据该索引,我将抓取索引之前的 4 个单词和索引之后的 4 个单词并计算分数。
x <- list(c('I', 'like', 'chocolate', 'cake'), c('chocolate', 'cake', 'is', 'good'))
y <- rep(x, 5000)
lapply(y, function(x) {
which(x %in% c("chocolate", "good"))
})
【问题讨论】:
-
用
match(c("a", "q", "f", "c", "z"),letters[1:10])怎么样? -
@Metrics,试试看。它没有给出相同的答案。它给出了
letters[1:10]的相应索引(如果不匹配,则为 NA)。泰勒,我想不出更好的办法。对于字符,data.table包有一个函数%chin%,比%in%快。 -
您能否举例说明您的实际问题,以便更好地了解您正在寻找的效率的大小/范围?即,向量是否很小,但您需要多次这样做;还是向量很大,你需要做几次?
-
可能类似于
sapply(your_vector_of_chars,function(x) which(x==letters[1:10]))? -
我敢打赌最快的答案是 Arceepeepee。
标签: r