我想找到一个数据框的索引,该索引与我的数据的替换后的值对应,我也希望索引也要过采样。由于过采样,which
不起作用。 foreach
循环很简单,但是太慢了。这是一个虚拟的示例:
library(foreach)
library(dplyr)
# sample unique values of a variable, with replacement
samp <- sample(unique(mtcars$carb), replace = TRUE)
# using which doesn't account for oversampling
which(mtcars$carb %in% samp)
# here's what I want to do, but in a slow loop
foreach(i = samp, .combine = c) %do% {which(mtcars$carb == i)}
有没有一种方法可以基于重复的值来获取重复的索引,从而避免循环?
答案 0 :(得分:0)
修改
使用find.matches
包中的Hmisc
可以得到相同的结果,但顺序不同。但是我不确定你的速度是否已经更快。
set.seed(123)
data <- floor(runif(20) * 10)
smpl <- sample(data, 10, replace = T)
matches <- Hmisc::find.matches(smpl, data)$matches
matches[matches > 0] %>% unlist
[1] 6 7 13 5 7 15 5 3 6 3 18 9 11 9 11 10 18 10 14 20 14 20 12 12
使用您的foreach
foreach(i = smpl, .combine = c) %do% {which(data == i)}
[1] 6 18 7 9 14 13 5 11 20 7 9 14 15 5 11 20 3 10 12 6 18 3 10 12