从R中的两列重新采样行
我有一个2列的数据集(比如X和Y)。我需要生成两列的100个样本,其中每个样本有10行 X和Y值应该是相关的。这意味着基本上我需要重新采样行 这是我到目前为止生成1个样本的工作从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
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