如果我有以下数据:
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/