获取与自举采样的唯一值相对应的数据帧的索引

时间:2018-07-10 15:45:37

标签: r

我想找到一个数据框的索引,该索引与我的数据的替换后的对应,我也希望索引也要过采样。由于过采样,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)} 

有没有一种方法可以基于重复的值来获取重复的索引,从而避免循环?

1 个答案:

答案 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