在R
中,我正在尝试对数据集重新采样。
数据库A
在第一列(整数)中包括一些代码,每行的特征如下:
A <- as.matrix(cbind(floor(runif(1000, 1,101)), matrix(rexp(20000, rate=.1), ncol=20) ))
某些代码在第一列中重复出现。
我想从第一列中随机重新采样代码,并创建一个新的矩阵或数据帧,这样对于重新采样的代码向量中的每个条目,它都会给我右手边。如果有更多的向量具有相同的重采样代码,则应该同时包括这两个向量。此外,如果我对同一代码重新采样两次,A中具有相同重新采样代码的所有行都应该出现两次。
---编辑---
重新采样是通过替换完成的。到目前为止,我所做的是:
res <- resample(unique(A[,1]), size = length(unique(A[,1])) , replace = TRUE, prob= NULL)
A.new <- A[which(A[,1] %in% res),]
然而,假设A
中的两行具有相同的代码(例如2),并且向量res
选择2
4次。在A.new
中,我将只有2次(因为在A[,1]
中有两条被编码为2
的线),而不是这两条线重复4次
我们可以这样做:
A.new = sapply(res, function(x) A[A[,1] == x, ])
A.new = do.call(rbind, A.new)
第一行形成矩阵列表,其中res
的每个值创建列表项,该列表项是A
的子集,其中第一列等于res
的值。如果res
多次包含相同的数字,则会为该值的每次出现创建一个矩阵。
第2行使用rbind
将该列表压缩为单个矩阵