r - 根据另一个向量的采样列表

时间:2015-04-10 12:30:48

标签: r sampling

考虑两个向量:

 R> l
 [1] "a" "b" "c" "d" "e" "f"
 R> s
 [1] "b" "d" "f"

我无法对要从采样中删除的索引进行硬编码。 如何从l

中不存在s中的元素进行抽样

2 个答案:

答案 0 :(得分:2)

你可以试试这个

l <-c("a","b","c","d","e","f")
s <- c("b", "d", "f")
l2 <- l[!l %in% s] # elements present in "l" and not in "s"
sample(l2, 10, replace = TRUE)

答案 1 :(得分:2)

我刚用post

找到它
sample(l[-c(match(s, l))])

PS:对不起,在搜索之前要求提问。

编辑: -

对于载体:

R> l <- c(1:5000)
R> s <- c(100:1100)

我跑了micobenchmark:

R> microbenchmark(func(l, s), sample(l[-c(match(s, l))], 10), times=1000L)

这里,func()定义如下:

R> func <- function(l, s) {
    l2 <- l[!l %in% s] # elements present in "l" and not in "s"
    return(sample(l2, 10, replace = TRUE))
}

返回微基准:

Unit: microseconds
                          expr   min    lq  mean median    uq  max neval cld
                    func(l, s) 218.7 221.3 234.1  222.1 229.5 2937  1000   a  
sample(l[-c(match(s, l))], 10) 222.5 226.9 238.8  227.8 235.7 2933  1000   a

我猜,他们的表现非常可比。