在R中,我有一个元素x和一个向量v.我想找到一个元素的第一个索引v,它等于x.我知道这样做的一种方法是:which(x == v)[[1]],但这似乎效率过低.有更直接的方法吗?
对于奖励积分,是否有一个功能,如果x是一个矢量?也就是说,它应该返回一个索引向量,指示xin 的每个元素的位置v.
我猜这是重复的,但我找不到,所以这里...
我想首先返回第二个索引:
first = c( "a" , "c" , "b" )
second = c( "c" , "b" , "a" )
result = c( 2 , 3 , 1 )
Run Code Online (Sandbox Code Playgroud)
我保证第一个和第二个具有唯一值,并且两者之间具有相同的值.
我正在寻找一种有效的x方法来匹配向量中向量的所有值,y而不仅仅是第一个位置,如match(). 我本质上追求的是默认行为pmatch(),但没有部分匹配:
x <- c(3L, 1L, 2L, 3L, 3L, 2L)
y <- c(3L, 3L, 3L, 3L, 1L, 3L)
Run Code Online (Sandbox Code Playgroud)
预期输出:
pmatch(x, y)
[1] 1 5 NA 2 3 NA
Run Code Online (Sandbox Code Playgroud)
一种方法是使用ave(),但是随着组数量的增加,这会变得很慢并且内存效率很低:
ave(x, x, FUN = \(v) which(y == v[1])[1:length(v)])
[1] 1 5 NA 2 3 NA
Run Code Online (Sandbox Code Playgroud)
任何人都可以推荐一种有效的方法来在优选(但不是强制)的基础 R 中实现这一目标吗?
用于基准测试的更大数据集:
set.seed(5)
x <- sample(5e3, 1e5, replace = TRUE)
y <- sample(x, replace = TRUE)
Run Code Online (Sandbox Code Playgroud)