【问题标题】:Using mutate_at() on a nested dataframe column to generate multiple unnested columns在嵌套数据框列上使用 mutate_at() 生成多个未嵌套列
【发布时间】:2018-02-03 06:47:39
【问题描述】:

我正在试验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() 生成多个汇总列(在每个嵌套子表中采用不同(但不是全部)列的方式)?

在这个例子中,我想取每一列的平均值,其中包含“秒”这个词。我曾希望这可能会产生一个新的嵌套列,然后我可以unnest() 但它不起作用。

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

我怎样才能做到这一点?

【问题讨论】:

  • 您忘记将数据集作为mutate_at 的第一个参数传递:~mutate_at(.x, vars...)

标签: r dplyr tidyr tidyverse purrr


【解决方案1】:

@aosmith 的评论是正确且有帮助的此外,我意识到我需要使用 summarise_at() 而不是 mutate_at() 像这样:

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

【讨论】:

    猜你喜欢
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-12
    • 2018-03-06
    • 2020-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    相关资源
    最近更新 更多