Échantillon de n lignes aléatoires par groupe, dans un dataframe

À partir de ces questions - Échantillon aléatoire de lignes de sous-ensemble de R dataframe & Échantillon aléatoire de lignes dans dataframe je peux facilement voir comment au hasard de l'échantillon (sélectionner) 'n' lignes à partir d'une df, ou 'n' lignes qui proviennent d'un niveau spécifique d'un facteur à l'intérieur d'une df.

Voici quelques exemples de données:

df <- data.frame(matrix(rnorm(80), nrow=40))
df$color <-  rep(c("blue", "red", "yellow", "pink"), each=10)

df[sample(nrow(df), 3), ] #samples 3 random rows from df, without replacement.

Pour par exemple un échantillon de 3 lignes aléatoires à partir de 'rose' de couleur à l'aide de library(kimisc):

library(kimisc)
sample.rows(subset(df, color == "pink"), 3)

ou de l'écriture de fonction personnalisée:

sample.df <- function(df, n) df[sample(nrow(df), n), , drop = FALSE]
sample.df(subset(df, color == "pink"), 3)

Cependant, je veux de l'échantillon 3 (ou n) lignes aléatoires de chaque niveau du facteur. I. e. le nouveau df aurait 12 lignes (de 3 bleues, 3 rouges, 3 jaunes, 3 de rose). Il est évidemment possible d'exécuter plusieurs fois, de créer newdfs pour chaque couleur, puis les lier ensemble, mais je suis à la recherche d'une solution plus simple.

InformationsquelleAutor jalapic | 2014-05-23