Случайно выбрать группы (и все случаи на группу) в R?

У меня есть R-фрейм данных с двумя уровнями данных: id а также year, Внутри групп, определенных id, годы увеличиваются (весь набор данных имеет одинаковое (количество) лет в группе, например так:

id    year    var1    var2
11A   2001    ...     ...
11A   2002    ...     ...
11A   2003    ...     ...
11A   2004    ...     ...
13B   2001    ...     ...
13B   2002    ...     ...
13B   2003    ...     ...
13B   2004    ...     ...
22Z   2001    ...     ...

У меня есть около 20 000 групп в моих данных, хотя их слишком много, чтобы составлять хорошие графики кривых роста. Как мне случайно выбрать около 20 моих идентификаторов? (так: также выберите все 4 строки года, соответствующие этому идентификатору?)

2 ответа

Это довольно просто, если вы используете sample а затем индекс. Вот вымышленный пример, похожий на тот, что вы представили. На самом деле это всего две строки кода, и вы можете сделать их в одной, если хотите.

dat <- data.frame(id=paste0(LETTERS[1:8], rep(1:1250, 8)), 
   year=as.factor(as.character(sample(c(1990:2012, 20000, T)))), 
   var1=rnorm(20000), var2=rnorm(20000))

#a look at the data
head(dat)

#sample 20 id's randomly
(ids <- sample(unique(dat$id), 20))

#narrow your data set
dat2 <- dat[dat$id %in% ids, ]
subset(df, id %in% sample(levels(df$id), 20))

это при условии, что ваш фрейм данных называется df и что твой id является фактором (использование unique вместо levels если это не так)

Другие вопросы по тегам