R рядный runif () между 2 столбцами - PullRequest
0 голосов
/ 23 января 2020

У меня есть следующий фрейм данных DF:

Min Max
10  20
14  34
9   29
... ...

и я хочу добавить новый столбец, который выбирает число между Min и Max каждой строки с равномерным распределением. Я попробовал следующее, но дал мне одно и то же число для всех строк, что означает, что выборка строка за строкой не соответствует желаемой:

DF$random <- runif(1,min=DF$Min,max=DF$Max)

Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 23 января 2020

Вот базовое решение R

  • просто runif() (благодаря комментариям @David Arenburg)
df$val <- with(df,runif(nrow(df),Min,Max))
  • с использованием Vectorize()
f <- Vectorize(function(x,y) runif(1,min=x,max=y),vectorize.args = c("x","y"))
df$val <- with(df,f(Min,Max))

такой, что

> df
  Min Max      val
1  10  20 14.51209
2  14  34 29.85087
3   9  29 22.97049

ДАННЫЕ

df <- structure(list(Min = c(10L, 14L, 9L), Max = c(20L, 34L, 29L)), class = "data.frame", row.names = c(NA, 
-3L))
1 голос
/ 23 января 2020

Попробуйте это:

library(dplyr)
DF <- data.frame(Min = c(10,14,9), Max= c(20,32,29))
DF %>% mutate(new_sample = mapply(function(x, y) runif(1, x, y), Min, Max))
#   Min Max new_sample
# 1   1  10   2.581535
# 2  11  20  13.287205
# 3  21  30  23.546859
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...