首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子样本的样本

子样本的样本
EN

Stack Overflow用户
提问于 2017-09-25 15:35:44
回答 2查看 66关注 0票数 1

我想两次从数据集中选择一个样本。实际上,我不想选择它,而是创建一个新的变量sampleNo,它指示一个案例属于哪个样本(一个还是两个)。

假设我有一个包含40个案例的数据集:

代码语言:javascript
复制
data <- data.frame(var1=seq(1:40), var2=seq(40,1)) 

我画的第一个示例(n=10)如下:

代码语言:javascript
复制
data$sampleNo <- 0
idx <- sample(seq(1,nrow(data)), size=10, replace=F)
data[idx,]$sampleNo <- 1

现在,(这里我的问题开始了)我想画第二个示例(n=10)。但是,这个示例应该从不属于第一个示例的情况中提取。还有,"var1“应该是偶数.

因此,对于根本没有绘制的情况,sampleNo应为0,对于属于第一个样本的情况为1,对于属于第二个样本的情况为2 (= sampleNo =0,var1为偶数)。

我试着这样解决这个问题:

代码语言:javascript
复制
idx2<-data$var1%%2 & data$sampleNo==0
sample(data[idx2,], size=10, replace=F)

但是如何将sampleNo设置为2呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-09-25 17:47:33

这里是一个完整的解决方案,你的问题更符合你原来的想法。代码可以缩短,但就目前而言,我试图使它尽可能透明。

代码语言:javascript
复制
# Data
data <- data.frame(var1 = 1:40, var2 = 40:1) 

# Add SampleNo column
data$sampleNo <- 0L

# Randomly select 10 rows as sample 1
pool_idx1 <- 1:nrow(data)
idx1 <- sample(pool_idx1, size = 10)
data[idx1, ]$sampleNo <- 1L

# Draw a second sample from cases where sampleNo != 1 & var1 is even 
pool_idx2 <- pool_idx1[data$var1 %% 2 == 0 & data$sampleNo != 1]
idx2 <- sample(pool_idx2, size = 10)
data[idx2, ]$sampleNo <- 2L
票数 1
EN

Stack Overflow用户

发布于 2017-09-25 15:42:46

我们可以按以下方式使用setdiff函数:

代码语言:javascript
复制
sample(setdiff(1:nrow(data), idx), 3, replace = F)

setdiff(x, y)将选择不在y中的x元素

代码语言:javascript
复制
setdiff(x = 1:20, y = seq(2,20,2))
 [1]  1  3  5  7  9 11 13 15 17 19

因此,在上面的示例中包括:

代码语言:javascript
复制
data$sampleNo2 <- 0
idx2 <- sample(setdiff(1:nrow(data), idx), 3, replace = F)
data[idx2,]$sampleNo2 <- 1
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46409025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档