R purrr:map 在 grouped/nested tibble
R purrr:map on a grouped/nested tibble
我想在嵌套分组小标题的各列之间应用一个函数,如下例所示。
library(tidyverse)
df <- swiss %>%
group_by(Catholic > 20) %>%
nest()
这会导致小标题看起来像:
> df
# A tibble: 2 x 2
# Groups: Catholic > 20 [2]
`Catholic > 20` data
<lgl> <list>
1 FALSE <tibble [26 × 6]>
2 TRUE <tibble [21 × 6]>
现在我做了一些函数来构建模型
fit <- function(df, modL = NA){
if (modL == 1) {fit <- lm(Fertility ~ Education, data = df)}
if (modL == 2) {fit <- lm(Fertility ~ Education + Examination, data = df)}
fit
}
现在我将该模型映射到分组数据的列,并创建两个新变量来存储模型拟合。
df <- df %>%
mutate(model1 = map(data, fit, modL = 1)) %>%
mutate(model2 = map(data, fit, modL = 2))
这会生成一个小标题,其中包含两个包含模型拟合的新列
> df
# A tibble: 2 x 4
# Groups: Catholic > 20 [2]
`Catholic > 20` data model1 model2
<lgl> <list> <list> <list>
1 FALSE <tibble [26 × 6]> <lm> <lm>
2 TRUE <tibble [21 × 6]> <lm> <lm>
我想要实现的是一个 purr-type 地图函数,它与下面的代码做同样的事情。
anova(df$model1[[1]], df$model2[[1]])
anova(df$model1[[2]], df$model2[[2]])
我虽然下面的代码可以工作,但它不。
map(df[,3:4], anova)
大师们,我如何跨嵌套和分组数据集的列映射函数,以使用该行的列作为输入为每行提供一个结果?
布兰特
df %>%
mutate(anova = map2(model1, model2, ~ anova(.x,.y)))%>%
mutate(pvalue = map_dbl(anova, ~.$`Pr(>F)`[2]))
我想这就是你想要的?你能澄清一下吗?第二个变异将为每个成对比较提取方差分析的 p 值。
我想在嵌套分组小标题的各列之间应用一个函数,如下例所示。
library(tidyverse)
df <- swiss %>%
group_by(Catholic > 20) %>%
nest()
这会导致小标题看起来像:
> df
# A tibble: 2 x 2
# Groups: Catholic > 20 [2]
`Catholic > 20` data
<lgl> <list>
1 FALSE <tibble [26 × 6]>
2 TRUE <tibble [21 × 6]>
现在我做了一些函数来构建模型
fit <- function(df, modL = NA){
if (modL == 1) {fit <- lm(Fertility ~ Education, data = df)}
if (modL == 2) {fit <- lm(Fertility ~ Education + Examination, data = df)}
fit
}
现在我将该模型映射到分组数据的列,并创建两个新变量来存储模型拟合。
df <- df %>%
mutate(model1 = map(data, fit, modL = 1)) %>%
mutate(model2 = map(data, fit, modL = 2))
这会生成一个小标题,其中包含两个包含模型拟合的新列
> df
# A tibble: 2 x 4
# Groups: Catholic > 20 [2]
`Catholic > 20` data model1 model2
<lgl> <list> <list> <list>
1 FALSE <tibble [26 × 6]> <lm> <lm>
2 TRUE <tibble [21 × 6]> <lm> <lm>
我想要实现的是一个 purr-type 地图函数,它与下面的代码做同样的事情。
anova(df$model1[[1]], df$model2[[1]])
anova(df$model1[[2]], df$model2[[2]])
我虽然下面的代码可以工作,但它不。
map(df[,3:4], anova)
大师们,我如何跨嵌套和分组数据集的列映射函数,以使用该行的列作为输入为每行提供一个结果?
布兰特
df %>%
mutate(anova = map2(model1, model2, ~ anova(.x,.y)))%>%
mutate(pvalue = map_dbl(anova, ~.$`Pr(>F)`[2]))
我想这就是你想要的?你能澄清一下吗?第二个变异将为每个成对比较提取方差分析的 p 值。