R语言 按行均匀分布抽样

ttcibm8c  于 2023-03-05  发布在  其他
关注(0)|答案(1)|浏览(151)

考虑以下数据:

df <- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

我打算从均匀分布中为每一行抽取一个随机样本。为什么我得到的列y的值相同呢?下面是我所做的:

set.seed(12)
df$y <- runif(1, min=df$x_min, max=df$x_max)

输出:

> df
  id x_min x_max        y
1  1   0.1  0.15 0.103468
2  2   0.2  0.23 0.103468
3  3   0.3  0.38 0.103468
4  4   0.4  0.44 0.103468
5  5   0.5  0.57 0.103468
7xllpg7q

7xllpg7q1#

这是因为runif(1, min=df$x_min, max=df$x_max)的计算结果为单个数字。请将1替换为nrow(df)以确保模拟的统一值的数量正确。

df <- data.frame(id=1:5,
                 x_min = c(0.1,0.2,0.3,0.4,0.5),
                 x_max = c(0.15,0.23,0.38,0.44,0.57))

set.seed(12)
df$y <- runif(1, min=df$x_min, max=df$x_max)

df
#>   id x_min x_max        y
#> 1  1   0.1  0.15 0.103468
#> 2  2   0.2  0.23 0.103468
#> 3  3   0.3  0.38 0.103468
#> 4  4   0.4  0.44 0.103468
#> 5  5   0.5  0.57 0.103468

set.seed(12)
df$y <- runif(nrow(df), min=df$x_min, max=df$x_max)

df
#>   id x_min x_max         y
#> 1  1   0.1  0.15 0.1034680
#> 2  2   0.2  0.23 0.2245333
#> 3  3   0.3  0.38 0.3754097
#> 4  4   0.4  0.44 0.4107753
#> 5  5   0.5  0.57 0.5118544

创建于2023年2月26日,使用reprex v2.0.2

相关问题