Случайно выбрать группы (и все случаи на группу) в 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
если это не так)