为每个元素采样n个值

时间:2017-08-09 14:02:56

标签: r

如果我有以下数据:

user_id <- seq_len(5)
product_id <- sample(0:1000,100,rep=TRUE)

并希望随机加入n个产品product_iduser_id,如何在没有循环的情况下完成这项工作?

  • 多个用户可以拥有相同的产品
  • 用户可以拥有重复的产品

我试过这个(n = 3):

data <- cbind(user_id[1], sample(product_id, 3))
for (i in 2:length(user_id)) {
  data <- rbind(data, cbind(user_id[i], sample(product_id, 3)))
}

虽然它产生了预期的结果,但它太慢了。

      [,1] [,2]
 [1,]    1  102
 [2,]    1   27
 [3,]    1  740
 [4,]    2   27
 [5,]    2  770
 [6,]    2  570
 [7,]    3  662
 [8,]    3   75
 [9,]    3  886
[10,]    4  984
[11,]    4  411
[12,]    4  297
[13,]    5  950
[14,]    5   37
[15,]    5   17

1 个答案:

答案 0 :(得分:3)

以下是使用setNames在我们的sample中附加ID的一个想法,即

n=3
setNames(sample(product_id, length(user_id)*n, replace = TRUE), 
         rep(user_id, each = n))

#  1   1   1   2   2   2   3   3   3   4   4   4   5   5   5 
#388 459 714 251 990 419 469 817  78 428 338 143 398 299 398