使用rnorm()生成数据集

时间:2015-01-02 14:55:21

标签: r

我需要生成一个数据集,其中包含3个类别中的20个观察结果(每个类别20个观察结果 - 总共60个),包含50个变量。我试图通过使用下面的代码来实现这一点,但它会抛出一个错误,我最终创建了50个变量的2个观察值。

data = matrix(rnorm(20*3), ncol = 50)
Warning message:
In matrix(rnorm(20 * 3), ncol = 50) :
data length [60] is not a sub-multiple or multiple of the number of columns [50]

我想知道我哪里出错了,或者即使这是生成数据集的最佳方式,以及对可能解决方案的一些解释,以便我今后能够更好地理解如何做到这一点。

1 个答案:

答案 0 :(得分:3)

下面的代码可能不到我的3行代码,但我想保持简单,我也想使用你似乎熟悉的matrix函数:

#for the response variable y (60 values - 3 classes 1,2,3  - 20 observations per class)
y <- rep(c(1,2,3),20 ) #could use sample instead if you want this to be random as in docendo's answer

#for the matrix of variables x
#you need a matrix of 50 variables i.e. 50 columns and 60 rows i.e. 60x50 dimensions (=3000 table cells)
x <- matrix( rnorm(3000), ncol=50 )

#bind the 2 - y will be the first column 
mymatrix <- cbind(y,x)

> dim(x) #60 rows , 50 columns
[1] 60 50
> dim(mymatrix) #60 rows, 51 columns after the addition of the y variable
[1] 60 51

<强>更新

我只想更详细地了解在您的问题中尝试matrix时出现的错误。

  1. 首先rnorm(20*3)rnorm(60)相同,它会从标准正态分布中生成60个值的向量。
  2. 使用matrix时,除非使用byrow参数另行指定,否则它会按列填充值。正如文档中提到的那样:
  3. If one of nrow or ncol is not given, an attempt is made to infer it from the length of data and the other parameter. If neither is given, a one-column matrix is returned.

    推断它的逻辑方法是方程式n * m = number_of_elements_in_matrix,其中nm分别是矩阵的rowscolumns的数量。在您的情况下,number_of_elements_in_matrix为60,列号为50.因此,行数必须为60/50 = 1.2行。但是,十进制行数没有任何意义,因此您得到错误。由于您选择了50列,因此只接受50的倍数作为number_of_elements_in_matrix。希望很清楚!