从R中的两列重新采样行

从R中的两列重新采样行,r,simulation,resampling,R,Simulation,Resampling,我有一个2列的数据集(比如X和Y)。我需要生成两列的100个样本,其中每个样本有10行 X和Y值应该是相关的。这意味着基本上我需要重新采样行 这是我到目前为止生成1个样本的工作 set.seed(326581) X1=rnorm(10,0,1) Y1=rnorm(10,0,2) data=data.frame(X1,Y1) library("dplyr", lib.loc="~/R/win-library/3.5") sample_n(data,10,replace = T) 因为我需要100

我有一个2列的数据集(比如X和Y)。我需要生成两列的100个样本,其中每个样本有10行

X和Y值应该是相关的。这意味着基本上我需要重新采样行

这是我到目前为止生成1个样本的工作

set.seed(326581)
X1=rnorm(10,0,1)
Y1=rnorm(10,0,2)
data=data.frame(X1,Y1)
library("dplyr", lib.loc="~/R/win-library/3.5")
sample_n(data,10,replace = T)
因为我需要100个样本,所以我尝试了R中的复制函数,但它不起作用。所以我试着使用一个循环

rex=c()
 rey=c()
 for(i in 1:100)
 {
 rex[i]=sample_n(data,10,replace=T)[,1]
 rey[i]=sample_n(data,10,replace=T)[,2]

 }
但它没有给出期望的输出

有人能帮我找出错误吗?
或者,是否有任何函数(如复制函数到从1列采样)更容易实现这一点

你的意思是这样的吗

使用基本R
样本

# Sample 100 rows from data
set.seed(2017)
idx <- sample(nrow(data), 100, replace = T)

# Store samples in a 100x2 data.frame 
df.smpl <- data[idx, ]
set.seed(2017)
df.smpl <- data %>%
    sample_n(100, replace = T)
这两种方法都将从
数据行
中提取的100个样本存储在维度的新
数据框

dim(data.smpl)
#[1] 100   2
或者如果您希望样本位于向量的
列表中

lapply(idx, function(i) as.numeric(data[i, ]))

更新 要从
数据中重复绘制10行
100次,可以使用
replicate

set.seed(2017);
lst <- replicate(
    100,
    df.smpl <- data %>% sample_n(10, replace = T),
    simplify = FALSE)
每个尺寸
10x2

sapply(lst, dim)
#[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#[1,]   10   10   10   10   10   10   10   10   10    10    10    10    10    10
#[2,]    2    2    2    2    2    2    2    2    2     2     2     2     2     2
#[,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,99] [,100]
#[1,]    10     10
#[2,]     2      2

你好,谢谢你的回复。但在你的回答中,你已经抽取了100行。不是吗?这不是我想要的。我需要“100个样本”,其中每个样本都是通过采样行生成的(这就是为什么我在dplyr包下使用“sample_n”命令而不是使用“sample”命令的原因)。所以在我的最终输出中,应该有100个样本,每个样本有2列。@Statlover“所以在我的最终输出中,应该有100个样本,每个样本有2列”,这正是我的解决方案给出的结果。另外,
sample\n
只是
sample.int
的包装,其作用与
sample
相同。您可以看到,在基本R和
dplyr
解决方案中
df.smpl
是相同的。我的坏。我还并没有包括每个样本的样本量。样本量应为10。所以应该有100个样本,每个样本的大小应该是10(按采样行)。是否可以编辑您的答案以反映?谢谢。@Statlover那么您的预期输出应该是什么样子?(1) 单个
1000x2
data.frame
1000
,因为
10x100
样本);或者(2)一个包含
100
data.frame
s的列表,每个都有维度
10x2
?我需要一个包含100个data.frames的列表,每个都有维度10x2。非常感谢。
sapply(lst, dim)
#[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
#[1,]   10   10   10   10   10   10   10   10   10    10    10    10    10    10
#[2,]    2    2    2    2    2    2    2    2    2     2     2     2     2     2
#[,15] [,16] [,17] [,18] [,19] [,20] [,21] [,22] [,23] [,24] [,25] [,26]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,27] [,28] [,29] [,30] [,31] [,32] [,33] [,34] [,35] [,36] [,37] [,38]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,39] [,40] [,41] [,42] [,43] [,44] [,45] [,46] [,47] [,48] [,49] [,50]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,51] [,52] [,53] [,54] [,55] [,56] [,57] [,58] [,59] [,60] [,61] [,62]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,63] [,64] [,65] [,66] [,67] [,68] [,69] [,70] [,71] [,72] [,73] [,74]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,75] [,76] [,77] [,78] [,79] [,80] [,81] [,82] [,83] [,84] [,85] [,86]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,87] [,88] [,89] [,90] [,91] [,92] [,93] [,94] [,95] [,96] [,97] [,98]
#[1,]    10    10    10    10    10    10    10    10    10    10    10    10
#[2,]     2     2     2     2     2     2     2     2     2     2     2     2
#[,99] [,100]
#[1,]    10     10
#[2,]     2      2