我现在已经停留了很长一段时间,并且对如何实现这一目标非常感兴趣。我有一个数据框,我想添加另一列,其中随机数介于1和Amount
列下该行的数字之间。我怎样才能做到这一点?这就是我现在拥有的:
dataframe$newColumn <- sample(1:30, nrow(dataframe), replace = T)
但我不希望它从1到30,而是将Amount
列中的数字作为最大值。
使用基数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)
使用dplyr
的Tidyverse解决方案:
foo <- data.frame(Amount = 1:10)
foo %>%
rowwise %>%
mutate(newColumn = sample(Amount, 1))