←
PDF 427 / 520 code with a function and repeat using a map function from purrr. This problem is structured a li
→
English · PDF 427
Original PDF page 427
中文 · PDF 427

使用一个包含函数的代码,并通过 purrr 中的 map 函数进行重复。这个问题的结构与您之前看到的略有不同。我们不是对每个变量重复一个操作,而是想对每个国家(即行的一个子集)重复一个操作。为此,我们需要一种新的数据结构:嵌套数据框。要创建嵌套数据框,我们先从一个分组数据框开始,然后对其进行“嵌套”:

by_country <- gapminder %>% group_by(country, continent) %>% nest() by_country #> # A tibble: 142 × 3 #> country continent data #> #> 1 Afghanistan 亚洲 <tibble [12 × 4]> #> 2 Albania 欧洲 <tibble [12 × 4]> #> 3 Algeria 非洲 <tibble [12 × 4]> #> 4 Angola 非洲 <tibble [12 × 4]> #> 5 Argentina 美洲 <tibble [12 × 4]> #> 6 Australia 大洋洲 <tibble [12 × 4]> #> # ... with 136 more rows

(我在这里稍微作弊了一下,同时按大洲和国家进行分组。给定国家后,大洲是固定的,所以这不会增加更多的组,但这是携带额外变量的简便方法。)

这会创建一个数据框,每个组(每个国家)有一行,并且有一个相当不寻常的列:data。data 是一个数据框列表(准确地说,是 tibble 列表)。这看起来像是个疯狂的想法:我们有一个数据框,其中的一列是其他数据框的列表!我稍后会解释为什么我认为这是个好主意。

data 列看起来有点棘手,因为它是一个相当复杂的列表,而我们仍在开发用于探索这类对象的良好工具。遗憾的是,不建议使用 str(),因为它通常会产生非常长的输出。但是,如果您从 data 列中取出单个元素,您会看到它包含该国家的所有数据(在本例中是阿富汗):

by_country$data[[1]] #> # A tibble: 12 × 4 #> year lifeExp pop gdpPercap #> #> 1 1952 28.8 8425333 779 #> 2 1957 30.3 9240934 821 #> 3 1962 32.0 10267083 853