2017-01-15 31 views
3

Ich möchte Zeilen aus einem Datenrahmen pro Gruppe probieren. Aber hier ist der Haken, ich möchte eine andere Anzahl von Datensätzen basierend auf Daten aus einer anderen Tabelle probieren. Hier sind meine reproduzierbaren Daten:Sampling unterschiedliche Anzahl von Zeilen nach Gruppe in dplyr Ordnungswidriges

df <- data_frame(
    Stratum = rep(c("High","Medium","Low"), 10), 
    id = c(1:30), 
    Value = runif(30) 
) 

sampleGuide <- data_frame(
    Stratum = c("High","Medium","Low"), 
    Surveys = c(3,2,5) 
) 

Ausgabe sollte wie folgt aussehen:

# A tibble: 10 × 2 
    Stratum  Value 
    <chr>  <dbl> 
1  High 0.21504972 
2  High 0.71069005 
3  High 0.09286843 
4 Medium 0.52553056 
5 Medium 0.06682459 
6  Low 0.38793128 
7  Low 0.01285081 
8  Low 0.87865734 
9  Low 0.09100829 
10  Low 0.14851919 

Hier ist mein arbeitsfreien Versuch

> df %>% 
+ left_join(sampleGuide, by = "Stratum") %>% 
+ group_by(Stratum) %>% 
+ sample_n(unique(Surveys)) 
Error in unique(Surveys) : object 'Surveys' not found 

Auch

> df %>% 
+ group_by(Stratum) %>% 
+ nest() %>% 
+ left_join(sampleGuide, by = "Stratum") %>% 
+ mutate(sample = map(., ~ sample_n(data, Surveys))) 
Error in mutate_impl(.data, dots) : 
     Don't know how to sample from objects of class function 

Es scheint wie sample_n erfordert Die size soll eine einzelne Nummer sein. Irgendwelche Ideen?

Ich bin nur auf der Suche nach tidyverse Lösungen. Extra Punkte für purrr!

This war ein ähnliches Problem, aber ich bin nicht mit der akzeptierten Antwort zufrieden, weil IRL die Anzahl der Schichten, mit denen ich es zu tun habe, groß ist.

Antwort

4

es heraus mit map2() von purrr

df %>% 
    nest(-Stratum) %>% 
    left_join(sampleGuide, by = "Stratum") %>% 
    mutate(Sample = map2(data, Surveys, sample_n)) %>% 
    unnest(Sample) 
Verwandte Themen