Генерация случайных чисел в каждой строке от 1 до определенного значения в столбце - PullRequest
1 голос
/ 18 апреля 2019

Я застрял на некоторое время и действительно заинтересован в том, как этого добиться.У меня есть фрейм данных, и я хочу добавить еще один столбец со случайными числами от 1 до числа в этой строке под столбцом Amount.Как я могу это сделать?Это то, что у меня сейчас есть:

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

, но я не хочу, чтобы оно менялось с 1 до 30, а вместо этого имею значение в столбце Amount как максимальное.

Ответы [ 2 ]

2 голосов
/ 18 апреля 2019

Используя базу 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 голос
/ 18 апреля 2019

Tidyverse решение с dplyr:

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