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

Generate random numbers in each row between 1 and a particular value in a column

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

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

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

使用 base R,您可以使用 vapply() 迭代 dataframe$Amount,为 dataframe$Amount

中的每个值调用 sample()
dataframe$newColumn <- vapply(dataframe$Amount, sample, integer(1), size = 1)

这相当于调用

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

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

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

我们在 vapply() 中使用 integer(1) 作为 FUN.VALUE 参数,实质上声明上述每次迭代的输出将是 integer。您可以使用 purrr 包中的 map_int() 获得相同的结果:

dataframe$newColumn <- purrr::map_int(dataframe$Amount, sample, size = 1)

Tidyverse 解决方案 dplyr:

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