在每行中生成介于 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()
的第一个参数是单个值 n
,sample(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))
我现在被困了很长一段时间,对如何实现这一目标非常感兴趣。我有一个数据框,我想添加另一列,其中随机数介于 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()
的第一个参数是单个值 n
,sample(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))