r - 对每个元素采样 n 个值

标签 r

如果我有以下数据:

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

并且想要将 product_id 中的 n 个产品随机连接到每个 user_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

最佳答案

这里有一个想法,使用 setNames 在我们的示例中附加 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 

关于r - 对每个元素采样 n 个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45592943/

相关文章:

r - 为什么 dplyr::filter 不允许我过滤两个垂直方向?

file - 如何在 R 中打印矩阵

r - 使用 sprintf 时跳过 R 中的 %

R 无法启动设备 PNG -Capability() 对于 PNG 具有 TRUE?

r - 如何在大数据帧中快速转换不同的时间格式?

r - 剪切数据和访问组以绘制百分位线

mysql - r Shiny 的日期范围输入到 sql 查询

R 无法识别 GhostScript 以嵌入 eps 图

r - R 中两个模型的 f 检验

c - 失败,错误为 : ‘‘operator’ is not a valid installed package