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