簡體   English   中英

在嵌套數據框列上使用mutate_at()生成多個未嵌套的列

[英]Using mutate_at() on a nested dataframe column to generate multiple unnested columns

我正在嘗試dplyrtidyrpurrr 我有這樣的數據:

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)))

如何使用purrrmutate_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM