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

问题描述 投票:1回答:2

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

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

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

r random sample
2个回答
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)

1
投票

使用dplyr的Tidyverse解决方案:

foo <- data.frame(Amount = 1:10)
foo %>%
  rowwise %>%
  mutate(newColumn = sample(Amount, 1))
© www.soinside.com 2019 - 2024. All rights reserved.