English · PDF 440
不过,你可以将结果包装在一个列表中!这符合 summarize() 的约定,因为现在每个摘要都是一个长度为 1 的列表(向量):
mtcars %>% group_by(cyl) %>% summarize(q = list(quantile(mpg))) #> # A tibble: 3 × 2 #> cyl q #> #> 1 4 <dbl [5]> #> 2 6 <dbl [5]> #> 3 8 <dbl [5]>
要让 unnest() 产生有用的结果,你还需要捕获概率:
probs <- c(0.01, 0.25, 0.5, 0.75, 0.99) mtcars %>% group_by(cyl) %>% summarize(p = list(probs), q = list(quantile(mpg, probs))) %>% unnest() #> # A tibble: 15 × 3 #> cyl p q #>
带有列表列的数据框为常见问题提供了解决方案:如果你想同时遍历列表的内容及其元素,该怎么办?与其试图把所有东西都塞进一个对象,不如创建一个数据框,这通常更容易:一列可以包含元素,另一列可以包含列表。从列表创建这种数据框的一个简单方法是 tibble::enframe():
x <- list( a = 1:5, b = 3:4, c = 5:6 )