我需要生成一个数据集,其中包含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]
我想知道我哪里出错了,或者即使这是生成数据集的最佳方式,以及对可能解决方案的一些解释,以便我今后能够更好地理解如何做到这一点。
答案 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
时出现的错误。
rnorm(20*3)
与rnorm(60)
相同,它会从标准正态分布中生成60个值的向量。matrix
时,除非使用byrow
参数另行指定,否则它会按列填充值。正如文档中提到的那样: 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
,其中n
和m
分别是矩阵的rows
和columns
的数量。在您的情况下,number_of_elements_in_matrix
为60,列号为50.因此,行数必须为60/50 = 1.2行。但是,十进制行数没有任何意义,因此您得到错误。由于您选择了50列,因此只接受50的倍数作为number_of_elements_in_matrix
。希望很清楚!