我有以下数据框DF
:
Min Max
10 20
14 34
9 29
... ...
并希望添加一个新列,该列对每行的 Min 和 Max 之间的数字进行采样,且分布均匀。我已经尝试过以下方法,但给我所有行的相同编号,这意味着它不是按需要逐行采样:
DF$random <- runif(1,min=DF$Min,max=DF$Max)
我怎样才能做到这一点?
我有以下数据框DF
:
Min Max
10 20
14 34
9 29
... ...
并希望添加一个新列,该列对每行的 Min 和 Max 之间的数字进行采样,且分布均匀。我已经尝试过以下方法,但给我所有行的相同编号,这意味着它不是按需要逐行采样:
DF$random <- runif(1,min=DF$Min,max=DF$Max)
我怎样才能做到这一点?
试试这个:
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
这是一个基本的 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))