r - 列中生成的随机数据
问题描述
我正在尝试基于列生成数据作为函数的输入。我需要三列 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
解决方案
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
推荐阅读
- vue.js - 如何从 vuex-store 更新 vue 子组件
- python - 如果使用原生 ORM,如何避免 Django Rest API 中的 SQL 注入攻击?
- c++ - 如何不使用“instance.function()”将“this”指针发送到函数?
- c++ - Backspace String 比较给定两个字符串 s 和 t,如果相等则返回 true
- api - 在 REST API 设计中的 /users/:id/posts 或 /posts/user/:id 端点中获取用户的帖子?
- windows - 尝试在某些图像上插入 PNG,缩小以适合左中位置
- javascript - 如何在 Javascipt 中使用 GroupBy 和 Sum 透视对象数组
- django - 带有过滤器的 Django 聚合查询
- android-studio-3.0 - 如何制作底部导航视图,构建 gradle 所需的任何东西?
- mysql - 带有'withYear()'和时间戳mysql的Spring引导LocalDateTime