首页 > 解决方案 > 列中生成的随机数据

问题描述

我正在尝试基于列生成数据作为函数的输入。我需要三列 a1、a2、a3 而不是如下所示的列表。另外,我需要对这些数字进行四舍五入。有什么建议么?

library(dplyr)
data = data.frame(a = 1:10)
data$a %>%
  purrr::map(function(x) rnorm(3, x, 1))
#> [[1]]
#> [1] 1.513705 1.543769 1.840468
#> 
#> [[2]]
#> [1] 1.183428 2.256548 1.991634
#> 
#> [[3]]
#> [1] 3.584815 1.917402 2.905785
#> 
#> [[4]]
#> [1] 2.402710 4.358808 3.723491
#> 
#> [[5]]
#> [1] 3.310686 5.035873 4.886036
#> 
#> [[6]]
#> [1] 5.419101 5.911897 5.610797
#> 
#> [[7]]
#> [1] 7.813963 6.818650 7.836421
#> 
#> [[8]]
#> [1] 7.967020 7.284805 8.346075
#> 
#> [[9]]
#> [1] 8.407555 8.242997 7.525530
#> 
#> [[10]]
#> [1] 11.775647  9.573505  9.672808

标签: r

解决方案


bind_rows将这些向量按行组合成一个数据框。它们需要首先命名,这就是setNames使用它们的原因。然后这些名称将成为输出中的列名。

library(tidyverse)

set.seed(1)
data = data.frame(a = 1:10)
data$a %>%
  purrr::map(function(x) setNames(rnorm(3, x, 1), paste0("a", 1:3))) %>%
  dplyr::bind_rows() %>% 
  round(1)

输出

      a1    a2    a3
   <dbl> <dbl> <dbl>
 1   2.4   0.9   1.4
 2   1.9   0.6   1.6
 3   2.6   2.9   4.1
 4   4.8   3.8   3.7
 5   5.7   5.6   4.3
 6   5.3   6.4   6.8
 7   6.9   7.9   7.4
 8   7.4   8.3   6.9
 9  10.4  11     8.6
10   9    10.6   9.9

推荐阅读