【问题标题】:Pick one random element from a vector for each row of a data.table从向量中为 data.table 的每一行选择一个随机元素
【发布时间】:2016-09-05 16:48:59
【问题描述】:

我有一个名称数据框。我有一个不同食物的载体。我想从该向量中为每个 Name 随机选择一个元素,以便 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)] 但它为每个人采样相同的食物项目(向量元素),而不是像上述示例那样不同的随机元素。

【问题讨论】:

  • 您不想只选择 1 个值,而是要为每一行选择一个值:dt[,NextItem:= sample(x,length(Name))]

标签: r data.table sample


【解决方案1】:

我们可以使用 group by option 然后sample

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

或者您也可以使用 .N 而不是 by 来执行此操作

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

【讨论】:

  • 感谢您展示其他方法。 .N 在示例函数的上下文中如何运行?
  • @gibbz00 .N 给出了数据集的行数,所以sample(x, .N) 将采样'x',size 作为行数。默认选项是@987654329 @,我们可以改成replace=TRUE
  • 在我看来,对于这种情况,第二种方法要好得多。
  • @Frank 谢谢,其实这是我发的第一个,后来重读了他的帖子,我把它改成了by = Name
猜你喜欢
  • 1970-01-01
  • 2014-04-21
  • 1970-01-01
  • 2014-06-19
  • 1970-01-01
  • 2014-07-23
  • 2010-09-12
相关资源
最近更新 更多