如果我有以下数据:
user_id <- seq_len(5)
product_id <- sample(0:1000,100,rep=TRUE)
并希望随机加入n
个产品product_id
到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
答案 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