首页 > 解决方案 > 列表列是 R 语言中的一个概念吗?

问题描述

列表列数据结构是 R 语言中的一个概念吗?

什么是列表列?将数据框视为列列表时,列表列是数据框中的列吗?

我从R for Data Science得到了困惑

列表列隐含在数据框的定义中:数据框是等长向量的命名列表。列表是一个向量,因此将列表用作数据框的列始终是合法的。但是,base R 并不容易创建列表列,并且 data.frame() 将列表视为列列表:

data.frame(x = list(1:3, 3:5))
#>   x.1.3 x.3.5
#> 1     1     3
#> 2     2     4
#> 3     3     5

您可以使用 I() 阻止 data.frame() 执行此操作,但结果打印效果不是特别好:

data.frame(
  x = I(list(1:3, 3:5)),
  y = c("1, 2", "3, 4, 5")
)
#>         x       y
#> 1 1, 2, 3    1, 2
#> 2 3, 4, 5 3, 4, 5

标签: r

解决方案


不仅是R 和 中的列表列概念tidyverse,有时它们几乎是不可避免的。大多数情况下,tibble(或 dataFrame)中每个单元格的内容是数字、字符或逻辑。但内容可以是向量、列表或小标题。通常,当您创建其中一个时,下一步是unnest. 例如,查看and此 tibble中的术语 with

library(tidyverse)
inputs <- tibble(Veggies = c("carrots", "potatoes and onions", "squash"),
                   Herbs = c("parsley", "sage", "rosemary and thyme"))

我们想给每个连词单独的一行,像这样:

splitPea <- inputs %>% 
  mutate(Veggies = str_split(Veggies, "\\s+and\\s+"),
         Herbs = str_split(Herbs, "\\s+and\\s+"))

给予

# A tibble: 3 x 2
  Veggies   Herbs    
  <list>    <list>   
1 <chr [1]> <chr [1]>
2 <chr [2]> <chr [1]>
3 <chr [1]> <chr [2]>

请注意,每一列都是一个列表,单元格内容是向量。现在unnest

splitPea %>% 
  unnest(c(Veggies, Herbs))

# A tibble: 5 x 2
  Veggies  Herbs   
  <chr>    <chr>   
1 carrots  parsley 
2 potatoes sage    
3 onions   sage    
4 squash   rosemary
5 squash   thyme   

PS,请参阅这篇文章以了解为什么+如何制作小标题列表的一列。


推荐阅读