[英]Using mutate_at() on a nested dataframe column to generate multiple unnested columns
我正在嘗試dplyr
, tidyr
和purrr
。 我有這樣的數據:
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))
現在dplyr
非常棒,因為我可以執行mutate_at()
的操作來一次操縱多個列。 例如:
df <- df %>%
mutate_at(vars(-one_of(c("X1", "X2", "ref"))), funs(first = . - ref)) %>%
mutate_at(vars(contains("first")), funs(second = . *2 ))
和tidyr
允許我將數據的子集作為子表嵌套在單個列中:
df <- df %>% nest(-X1)
多虧了purrr
我可以總結這些子表,同時將原始數據保留在嵌套列中:
df %>% mutate(mean = map_dbl(data, ~ mean(.x$meas3_first_second)))
如何使用purrr
和mutate_at()
生成多個匯總列(采用每個嵌套子表中不同(但不是全部)列的方式)?
在此示例中,我想使用其中包含“ second”一詞的每一列的均值。我希望這可以產生一個新的嵌套列,然后我可以unnest()
嵌套unnest()
但它不起作用。
df %>% mutate(mean = map(data, ~ mutate_at(vars(contains("second")),
funs(mean_comp_exp = mean(.)))))
我該如何實現?
通過@aosmith的評論是正確的和有益此外,我意識到我需要使用summarise_at()
而不是mutate_at()
像這樣:
df %>%
mutate(mean = map(data, ~ summarise_at(.x, vars(contains("second")),
funs(mean_comp_exp = mean(.) )))) %>%
unnest(mean)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.