English · PDF 437
通常,你不会用 tibble() 来创建列表列。相反,你会使用以下三种方法之一,从普通列创建列表列:
另外,你也可以使用 tibble::enframe() 从命名列表创建列表列。
一般来说,创建列表列时,你应该确保它们是同质的:每个元素应包含相同类型的内容。虽然没有检查机制来确保这一点,但如果你使用 purrr 并记住所学过的关于类型稳定函数的知识,你会发现这会自然而然地发生。
nest() 会创建一个嵌套数据框,即包含数据框列表列的数据框。在嵌套数据框中,每一行都是一个元观测:其他列给出定义该观测的变量(比如前面的 country 和 continent),而数据框的列表列则给出构成该元观测的各个单独观测。
使用 nest() 有两种方式。到目前为止,你已经看到了如何在分组数据框上使用它。当应用于分组数据框时,nest() 会保留分组列不变,并将其他所有内容打包进列表列:
gapminder %>% group_by(country, continent) %>% nest() #> # A tibble: 142 × 3 #> country continent data #> #> 1 Afghanistan Asia <tibble [12 × 4]> #> 2 Albania Europe <tibble [12 × 4]> #> 3 Algeria Africa <tibble [12 × 4]>