On Mar 30, 2012, at 8:17 AM, inkhorn wrote:

Okay, here's some sample code:

ID = c(1,2,3,"A1",5,6,"A2",8,9,"A3")
fakedata = rnorm(10, 5, .5)
main.df = data.frame(ID,fakedata)

results for my data frame:
main.df
  ID     fakedata
1   1     5.024332
2   2     4.752943
3   3     5.408618
4  A1   5.362838
5   5    5.158660
6   6    4.658235
7  A2   5.389601
8   8    4.998249
9   9    5.248517
10 A3 4.159490

sample1.df = main.df[sample(nrow(main.df), 4), ]
sample1.df
 ID     fakedata
5  5     5.158660
9  9     5.248517
4 A1   5.362838
8  8    4.998249

Here's what happens when I put a comma before the variable ID:

sample2.df = main.df[sample(nrow(main.df[! main.df[,"ID"] %in%
sample1.df[,"ID"]]), 5),]
Error in `[.data.frame`(main.df, !main.df[, "ID"] %in% sample1.df[, "ID"]) :
 undefined columns selected

That was not the code I offered, which had no error:

> sample2.df <- main.df[ ! main.df[, "ID"] %in% sample1.df[, "ID"] , ]
> sample2.df
  ID fakedata
2  2 5.225752
4 A1 4.788752
5  5 3.973376
6  6 5.565669
8  8 5.369974
9  9 5.954552

If you want to further sub-sample from that complement which I offered (and that _was_ a random sample from the main dataset albeit not the particular sample you wanted) , then it is available for further sampling.

> sample2.df[ sample(nrow(sample2.df), 3), ]
  ID fakedata
2  2 5.225752
8  8 5.369974
6  6 5.565669




Here's what happens when I exclude the comma:

sample2.df = main.df[sample(nrow(main.df[! main.df["ID"] %in%
sample1.df["ID"]]), 5),]

You cannot do both steps in one line using that exact strategy. But you can "chain" uses of "[". You could for instance have constructed indexes (indices seems to be disappearing from the English languages):

idx <- sample(nrow(main.df), 4)
subset1 <- main.df[ idx, ]
subset2 <- main.df[-idx, ][sample(nrow(main.df)-nrow(subset1), 3), ]

> subset2
  ID fakedata
6  6 5.565669
5  5 3.973376
2  2 5.225752

--
David.


sample2.df
  ID     fakedata
8   8     4.998249
1   1     5.024332
3   3     5.408618
5   5     5.158660
10 A3  4.159490

As you can see, one way I get nothing other than an error, the other way I get a sample that doesn't exclude rows that were already included in the 1st
sample.

Thanks,
Matt Dubins

--
View this message in context: 
http://r.789695.n4.nabble.com/Random-sample-from-a-data-frame-where-ID-column-values-don-t-match-the-values-in-an-ID-column-in-a-se-tp4516448p4518878.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@r-project.org mailing list
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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
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.

Reply via email to