r - 在“许多模型”设置中的嵌套数据框中使用 data_grid
问题描述
我有大量模型存储在与此类似的嵌套数据框中(示例改编自许多模型):
library(gapminder)
data(gapminder)
# Nest data.
nested.gap <- gapminder %>%
group_by(country, continent) %>%
nest()
# Make a model.
many.mod <- function(df) {
lm(lifeExp ~ year + gdpPercap, data = df)
}
# Apply model to nested data.
nested.gap <- nested.gap %>%
mutate(model=map(data, many.mod))
head(nested.gap)
country continent data model
<fct> <fct> <list> <list>
1 Afghanistan Asia <tibble [12 x 4]> <lm>
2 Albania Europe <tibble [12 x 4]> <lm>
我想用data_grid()
每个模型生成一个网格,存储为嵌套数据框,如下所示:
country continent data model grid
<fct> <fct> <list> <list> <list>
1 Afghanistan Asia <tibble [12 x 4]> <lm> <tibble [12 x 2]>
2 Albania Europe <tibble [12 x 4]> <lm> <tibble [12 x 2]>
这对于单个数据集和单个模型来说很容易做到,即
nz <- filter(gapminder, country == "New Zealand")
nz_mod <- lm(lifeExp ~ year + gdpPercap, data = nz)
data_grid(nz, year, .model=nz_mod)
year gdpPercap
<int> <dbl>
1 1952 16933.
2 1957 16933.
但我不知道如何将其应用于我的嵌套数据框。有什么建议么?
解决方案
你需要的是map2
在purrr
# I define a function take two param data & model as data_grid needed both
# and the year is getting from the data.
data_grid_model <- function(data, model) {
data_grid(data, year, .model = model)
}
# Here I use map2 which take two input data & model
nested.gap %>%
mutate(grid = map2(data, model, data_grid_model))
这是输出
# A tibble: 142 x 5
# Groups: country, continent [142]
country continent data model grid
<fct> <fct> <list> <list> <list>
1 Afghanistan Asia <tibble [12 × 4]> <lm> <tibble [12 × 2]>
2 Albania Europe <tibble [12 × 4]> <lm> <tibble [12 × 2]>
3 Algeria Africa <tibble [12 × 4]> <lm> <tibble [12 × 2]>
4 Angola Africa <tibble [12 × 4]> <lm> <tibble [12 × 2]>
5 Argentina Americas <tibble [12 × 4]> <lm> <tibble [12 × 2]>
6 Australia Oceania <tibble [12 × 4]> <lm> <tibble [12 × 2]>
7 Austria Europe <tibble [12 × 4]> <lm> <tibble [12 × 2]>
8 Bahrain Asia <tibble [12 × 4]> <lm> <tibble [12 × 2]>
9 Bangladesh Asia <tibble [12 × 4]> <lm> <tibble [12 × 2]>
10 Belgium Europe <tibble [12 × 4]> <lm> <tibble [12 × 2]>
# … with 132 more rows
你可以在这里了解更多map2
推荐阅读
- amazon-web-services - k8s ingress 与 Nginx,整体流程是怎样的
- javascript - 在 JavaScript 中将 DOM 创建的表转换为多维表
- vue.js - 如何在动态模板Vuejs中添加事件onClick?
- for-loop - 使用 For 循环后尝试使用打印功能的错误消息 - Total Newbie
- python - column_mult = np.multiply(column_sums, column_numbers) ValueError: 操作数不能与形状一起广播 (1,1920) (1,640)
- laravel - Laravel 与附加 where 语句的关系
- node.js - 增加嵌套的 mongoose shcema
- flutter - 没有为“PickedFile”类型定义“复制”方法
- python - 如何在 Django 中使用 POST 更新数据库中的信息?
- python - 如何对多个模型的输出执行 SoftMax?