For personal aesthetic reasons, I changed the name "data" to "dat".
Your code, with a slight modification: set.seed (1357) ## for reproducibility dat <- data.frame(var1=seq(1:40), var2=seq(40,1)) dat$sampleNo <- 0 idx <- sample(seq(1,nrow(dat)), size=10, replace=F) dat[idx,"sampleNo"] <-1 ## yielding > dat var1 var2 sampleNo 1 1 40 0 2 2 39 1 3 3 38 0 4 4 37 0 5 5 36 0 6 6 35 1 7 7 34 0 8 8 33 0 9 9 32 0 10 10 31 0 11 11 30 0 12 12 29 0 13 13 28 0 14 14 27 0 15 15 26 1 16 16 25 1 17 17 24 0 18 18 23 0 19 19 22 0 20 20 21 1 21 21 20 0 22 22 19 1 23 23 18 0 24 24 17 1 25 25 16 0 26 26 15 1 27 27 14 0 28 28 13 0 29 29 12 0 30 30 11 0 31 31 10 0 32 32 9 0 33 33 8 0 34 34 7 0 35 35 6 1 36 36 5 0 37 37 4 1 38 38 3 0 39 39 2 0 40 40 1 0 ## This is basically a transcription of your specification into indexing logic dat <- within(dat,sampleNo[sample(var1[(var1%%2 == 0) & sampleNo==0],10,rep=FALSE)] <- 2) ##yielding > dat var1 var2 sampleNo 1 1 40 0 2 2 39 1 3 3 38 0 4 4 37 2 5 5 36 0 6 6 35 1 7 7 34 0 8 8 33 2 9 9 32 0 10 10 31 2 11 11 30 0 12 12 29 0 13 13 28 0 14 14 27 2 15 15 26 1 16 16 25 1 17 17 24 0 18 18 23 2 19 19 22 0 20 20 21 1 21 21 20 0 22 22 19 1 23 23 18 0 24 24 17 1 25 25 16 0 26 26 15 1 27 27 14 0 28 28 13 2 29 29 12 0 30 30 11 2 31 31 10 0 32 32 9 2 33 33 8 0 34 34 7 2 35 35 6 1 36 36 5 2 37 37 4 1 38 38 3 0 39 39 2 0 40 40 1 0 dat <- within(dat,sampleNo[sample(var1[(var1%%2 == 0) & sampleNo==0],10,rep=FALSE)] <- 2) Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Mon, Sep 25, 2017 at 10:27 AM, David Studer <stude...@gmail.com> wrote: > Hello everybody! > > I have the following problem: I'd like to select a sample from a subsample > in a dataset. Actually, I don't want to select it, but to create a new > variable sampleNo that indicates to which sample (one or two) a case > belongs to. > > Lets suppose I have a dataset containing 40 cases: > > data <- data.frame(var1=seq(1:40), var2=seq(40,1)) > > The first sample (n=10) I drew like this: > > data$sampleNo <- 0 > idx <- sample(seq(1,nrow(data)), size=10, replace=F) > data[idx,]$sampleNo <- 1 > > Now, (and here my problems start) I'd like to draw a second sample (n=10). > But this sample should be drawn from the cases that don't belong to the > first sample only. *Additionally, "var1" should be an even number.* > > So sampleNo should be 0 for cases that were not drawn at all, 1 for cases > that belong to the first sample and 2 for cases belonging to the second > sample (= sampleNo equals 0 and var1 is even). > > I was trying to solve it like this: > > idx2<-data$var1%%2 & data$sampleNo==0 > sample(data[idx2,], size=10, replace=F) > > But how can I set sampleNo to 2? > > > Thank you very much for your help! > > David > > [[alternative HTML version deleted]] > > ______________________________________________ > R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/ > posting-guide.html > and provide commented, minimal, self-contained, reproducible code. > [[alternative HTML version deleted]] ______________________________________________ R-help@r-project.org mailing list -- To UNSUBSCRIBE and more, see https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide http://www.R-project.org/posting-guide.html and provide commented, minimal, self-contained, reproducible code.