在每一行中生成1到一列中的特定值之间的随机数

时间:2019-04-18 13:07:41

标签: r random sample

我已经停留了很长时间,并且对实现这一目标非常感兴趣。我有一个数据框,我想添加另一列,其随机数介于1和列Amount下该行中的数字之间。我怎样才能做到这一点? 这就是我现在拥有的:

dataframe$newColumn <- sample(1:30, nrow(dataframe), replace = T)

但是我不希望它从1增至30,而希望将Amount列中的数字设为最大值。

2 个答案:

答案 0 :(得分:2)

使用基数R,您可以使用vapply()遍历dataframe$Amount,为sample()中的每个值调用dataframe$Amount

dataframe$newColumn <- vapply(dataframe$Amount, sample, integer(1), size = 1)

这等效于呼叫

sample(dataframe$Amount[i], size = 1)

对于i中的每一行dataframe。请注意,如果sample()的第一个参数是单个值n,则sample(n)会将其扩展为1:n

sample(5)
## [1] 5 2 4 1 3

我们在integer(1)中使用vapply()中的FUN.VALUE作为integer参数,从本质上说,上述每次迭代的输出将是map_int()。您可以使用purrr软件包中的dataframe$newColumn <- purrr::map_int(dataframe$Amount, sample, size = 1) 获得相同的结果:

/etc/init.d/my.service

答案 1 :(得分:1)

使用dplyr的Tidyverse解决方案:

foo <- data.frame(Amount = 1:10)
foo %>%
  rowwise %>%
  mutate(newColumn = sample(Amount, 1))