0

我有以下数据框DF

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

并希望添加一个新列,该列对每行的 Min 和 Max 之间的数字进行采样,且分布均匀。我已经尝试过以下方法,但给我所有行的相同编号,这意味着它不是按需要逐行采样:

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

我怎样才能做到这一点?

4

2 回答 2

1

试试这个:

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
于 2020-01-23T12:28:44.363 回答
1

这是一个基本的 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))
于 2020-01-23T12:34:05.040 回答