在嵌套数据框列上使用 mutate_at() 生成多个未嵌套列
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
允许我将数据的子集作为子 table 嵌套在单个列中:
df <- df %>% nest(-X1)
感谢purrr
,我可以总结这些子table,同时在嵌套列中保留原始数据:
df %>% mutate(mean = map_dbl(data, ~ mean(.x$meas3_first_second)))
如何使用 purrr
和 mutate_at()
生成多个汇总列(在每个嵌套子 table 中采用不同(但不是全部)列的方法)?
在这个例子中,我想取 it.I 中带有单词 "second" 的每一列的平均值,希望这可能会产生一个新的嵌套列,然后我可以 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)
我正在试验 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
允许我将数据的子集作为子 table 嵌套在单个列中:
df <- df %>% nest(-X1)
感谢purrr
,我可以总结这些子table,同时在嵌套列中保留原始数据:
df %>% mutate(mean = map_dbl(data, ~ mean(.x$meas3_first_second)))
如何使用 purrr
和 mutate_at()
生成多个汇总列(在每个嵌套子 table 中采用不同(但不是全部)列的方法)?
在这个例子中,我想取 it.I 中带有单词 "second" 的每一列的平均值,希望这可能会产生一个新的嵌套列,然后我可以 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)