2017-08-25 26 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)