r-使用具有相同代码(ID)的条目重新采样



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选择24次。在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将该列表压缩为单个矩阵

相关内容

最新更新