2017-08-25 1 views
1

Ich experimentiere mit dplyr, tidyr und purrr. Ich habe Daten wie folgt aus:Verwenden von mutate_at() in einer verschachtelten Dataframe-Spalte zum Erzeugen mehrerer nicht-getrennter Spalten

library(tidyverse) 

set.seed(123) 
df <- data_frame(X1 = rep(LETTERS[1:4], 6), 
       X2 = sort(rep(1:6, 4)), 
       ref = sample(1:50, 24), 
       sampl1 = sample(1:50, 24), 
       var2 = sample(1:50, 24), 
       meas3 = sample(1:50, 24)) 

Jetzt dplyr ist genial, weil ich Dinge wie mutate_at() tun können mehrere Spalten gleichzeitig zu manipulieren. zB:

df <- df %>% 
    mutate_at(vars(-one_of(c("X1", "X2", "ref"))), funs(first = . - ref)) %>% 
    mutate_at(vars(contains("first")), funs(second = . *2)) 

und tidyr ermöglicht es mir, nisten Teilmengen der Daten als Untertabellen in einer einzigen Spalte:

df <- df %>% nest(-X1) 

und dank purrr ich diese Untertabellen zusammenfassen kann, während die ursprünglichen Daten beibehalten in der verschachtelten Spalte:

df %>% mutate(mean = map_dbl(data, ~ mean(.x$meas3_first_second))) 

Wie kann ich purrr und mutate_at() um mehrere Zusammenfassung colum zu erzeugen ns (nimm die Mittel verschiedener (aber nicht aller) Spalten in jeder verschachtelten Untertabelle)?

In diesem Beispiel möchte ich den Mittelwert jeder Spalte mit dem Wort "zweite" darin nehmen. Ich hatte gehofft, dass dies eine neue verschachtelte Spalte erzeugen könnte, die ich dann unnest() könnte, aber es funktioniert nicht.

df %>% mutate(mean = map(data, ~ mutate_at(vars(contains("second")), 
              funs(mean_comp_exp = mean(.))))) 

Wie kann ich das erreichen?

+0

Sie haben vergessen, den Datensatz als erstes Argument von 'mutate_at' weitergeben müssen:' ~ mutate_at (.x, vars ...) ' – aosmith

Antwort

0

Der Kommentar von @aosmith war richtig und hilfreich Außerdem wurde mir klar, ich summarise_at() und nicht mutate_at() wie zu verwenden, so benötigt:

df %>% 
    mutate(mean = map(data, ~ summarise_at(.x, vars(contains("second")), 
               funs(mean_comp_exp = mean(.))))) %>% 
    unnest(mean) 
Verwandte Themen