首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建10个分类变量和10个连续随机变量,并将它们保存为数据框架

创建10个分类变量和10个连续随机变量,并将它们保存为数据框架
EN

Stack Overflow用户
提问于 2020-05-29 02:08:41
回答 2查看 53关注 0票数 0

我想创建一个数据框架,包含10个分类变量和10个连续随机变量。我可以使用下面的循环来完成它。

代码语言:javascript
复制
   p_val=rbeta(10,1,1)   #10 probabilities
    n=20
    library(truncnorm)
    mu_val=rtruncnorm(length(p_val),0,Inf, mean = 100, sd=5)#rnorm(length(p))
    d_mat_cat=matrix(NA, nrow = n, ncol = length(p))
    d_mat_cont= matrix(NA, nrow = n, ncol = length(p))
      for ( j in 1:length(p)){
        d_mat_cat[,j]=rbinom(n,1,p[j]) #Binary RV
        d_mat_cont[,j]=rnorm(n,mu_val[j]) #Cont. RV
      }
    d_mat=cbind(d_mat_cat, d_mat_cont)

如有其他选择,我们将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-29 03:41:33

rbinom是在prob上向量化的,rnorm是在mean上向量化的,所以您可以使用以下方法:

代码语言:javascript
复制
cbind(
  matrix(rbinom(n * length(p_val), size = 1, prob = p_val), 
         ncol = length(p_val), byrow = TRUE),
  matrix(rnorm(n * length(mu_val), mean = mu_val),
         ncol = length(mu_val), byrow = TRUE)
)

在使用rep时,我们可以稍微聪明一点,以使调用更加简洁:

代码语言:javascript
复制
p_val = c(0, 0.5, 1)
mu_val = c(1, 10, 100)
n = 4

## 
matrix(
  c(
    rbinom(n * length(p_val), size = 1, prob = rep(c(0, .5, 1), each = n)),
    rnorm(n * length(mu_val), mean = rep(c(1, 10, 100), each = n))
  ),
  nrow = n,
)

#      [,1] [,2] [,3]       [,4]     [,5]     [,6]
# [1,]    0    1    1  1.1962718 9.373595 100.1739
# [2,]    0    0    1 -0.1854631 9.574706 100.0725
# [3,]    0    1    1  3.4873697 9.447363 100.1345
# [4,]    0    1    1  2.8467450 9.700975 101.3178
票数 3
EN

Stack Overflow用户

发布于 2020-05-29 02:45:31

您可以尝试使用sapply运行rbinomrnormcbind数据。

代码语言:javascript
复制
cbind(sapply(p_val, rbinom, n = n, size = 1), sapply(mu_val, rnorm, n = n))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62077555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档