←
PDF 437 / 520 Creating List-Columns
→
English · PDF 437
Original PDF page 437
中文 · PDF 437

创建列表列

通常,你不会用 tibble() 来创建列表列。相反,你会使用以下三种方法之一,从普通列创建列表列:

    1. 使用 tidyr::nest() 将分组数据框转换为嵌套数据框,其中包含数据框的列表列。
    1. 使用 mutate() 和返回列表的向量化函数。
    1. 使用 summarize() 和返回多个结果的汇总函数。

另外,你也可以使用 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]>