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

时间:2017-01-25 17:47:36

标签: r resampling

R中,我正在尝试重新采样我的数据集。

数据库A包括第一列中的一些代码(整数)和每行的特征,如下所示:

A <- as.matrix(cbind(floor(runif(1000, 1,101)), matrix(rexp(20000, rate=.1), ncol=20) ))

在第一列中重复了一些代码。

我想从第一列中随机重新采样代码并创建一个新的矩阵或数据帧,这样对于重采样代码矢量中的每个条目,它都给了我右手边。如果有更多矢量具有相同的重采样代码,则应包括两者。此外,如果我重新采样相同的代码两次,A中具有相同重采样代码的所有行应该出现两次。

--- --- EDIT

重新取样完成后更换。到目前为止,我所做的是:

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]),而是将这两行重复了4次

1 个答案:

答案 0 :(得分:1)

我们可以这样做:

A.new = sapply(res, function(x) A[A[,1] == x, ])
A.new = do.call(rbind, A.new)

第一行列出了一个矩阵列表,其中res的每个值都创建了一个列表项,该列表项是A的子集,第一列等于res的值。如果res包含多次相同的数字,则会为该值的每次出现创建一个矩阵。

第二行使用rbind将此列表压缩为单个矩阵