2017-08-25 57 views
1

我正在使用dplyr,tidyrpurrr進行實驗。我的數據是這樣的:在嵌套數據幀列上使用mutate_at()生成多個未發生列

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同時保留原有的數據,我可以總結這些子表在嵌套列:

​​

如何使用purrrmutate_at()產生多個摘要科拉姆ns(在每個嵌套子表中採用不同的(但不是全部)列)?

在這個例子中,我想採取與它。我的詞「第二」每列的平均曾希望,這可能會產生新的嵌套列,我可以再unnest(),但它不工作。

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

我該如何做到這一點?

+0

你忘了通過數據集作爲mutate_at'的'的第一個參數:' 〜mutate_at(.x,vars ...)' – aosmith

回答

0

通過@aosmith的評論是正確的和有益此外,我意識到我需要使用summarise_at()而不是mutate_at()像這樣:

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