我有一个垫子(1e6,34)和一个矢量vt(1e6)。我想得到一个mat2(1000,34)和一个向量vt2(1000),其中1000行是从原始矩阵中随机取出的。
我认为在R中这很容易,但我还没有找到解决方案。
我能做到
mat2 <- matrix(,ncol=34,nrow=1)
vt2 <- matrix(,ncol=1,nrow=1)
for (i in 1:1000) {
i <- sample(1:1e6, 1)
mat2 <- rbind(mat2,mat[i,])
vt2 <- rbind(vt2,vt[i])
}
mat2 <- mat2[-1,]
vt2 <- vt2[-1,]
但是我相信它可以用更少的行来完成,而且这并不能确保我不会重复行。有什么想法吗?
答案 0 :(得分:1)
也许我在你的问题中遗漏了一些东西,但这会有用吗?
sampleSubset<-sample(1:1e6, 1000) #defaults to replace = FALSE
mat2<-mat[sampleSubset, ] #take the randomly selected rows
vect2<-vect[sampleSubset] #take the corresponding vector entries
答案 1 :(得分:1)
假设一个名为&#34; mat&#34; (ncol = 34
和nrow = 1e6
),你应该能够做你想做的事情:
mat[sample(1e6, 1000, FALSE), ]
您的矢量可以采用类似的方法,&#34; vt&#34;长度为1e6:
vt[sample(1e6, 1000, FALSE)]
当然,如果您希望行的相同索引提取和要提取的向量位置,请执行以下操作之一:
sample(1e6, 1000, FALSE)
的结果存储为单独的向量,并将其用于子集。set.seed(your-favorite-or-most-random-number)
之前使用sample
,当然,每次都使用相同的种子。