从向量中为 data.table 的每一行选择一个随机元素

Pick one random element from a vector for each row of a data.table

我有一个名字数据框。我有不同食物的载体。我想为每个名称从该向量中随机选择一个元素,以便 data.table 如下所示。

x<- c("apple","pepsi","rice","coke","banana","butter","bread")

library(data.table)

dt <- fread('

Name  NextItem
John   rice
Logan  butter
Sarah  bread
Vinny  rice
')

我想要带替换的采样。我试过了

dt[,NextItem:= sample(x,1)] 但它为每个人采样相同的食物(矢量元素),而不是像上述示例那样的不同随机元素。

我们可以使用 group by 选项然后做 sample

dt[, NextItem := sample(x, 1), by = Name]

或者您也可以使用 .N 而不是 by

dt[, NextItem := sample(x, .N, replace = TRUE)]