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?
Sie haben vergessen, den Datensatz als erstes Argument von 'mutate_at' weitergeben müssen:' ~ mutate_at (.x, vars ...) ' – aosmith