动态排除某些值后,从矢量中选择一个随机元素

时间:2016-09-05 18:42:46

标签: r vector random data.table

这是我的dataframe / data.table,显示了人们已经吃过的东西以及我的目标字段NextItem,这是他们可能吃的下一个随机项目(未吃完)

library(data.table)
dt <- read.table(text='
            Name   ItemEaten   NextItem
            John   rice        banana
            John   butter      banana
            Sarah  bread       apple
            Vinny  apple       coke   
            ',header=T)

setDT(dt)

这个载体x是我的食物世界:

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

NextItem字段应仅包含x向量中尚未被给定个体吃过的食物项目(不在ItemEaten字段中)。例如,John已经吃过rice & butter,这就是为什么John应该拥有NextItem字段中剩下的五个食物中的一个。我试过了dt[,NextItem:= sample(x- ItemEaten,1),by=Name]

1 个答案:

答案 0 :(得分:2)

感谢所有上述评论者的贡献,我能够找到解决问题的方法。以下代码可以完美地完成工作。

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