【问题标题】:Is list-column a concept in the R language? [closed]列表列是 R 语言中的一个概念吗? [关闭]
【发布时间】:2020-06-03 00:17:34
【问题描述】:

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

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

我从 R for Data Science 得到了困惑

列表列隐含在数据框的定义中: 数据框是等长向量的命名列表。列表是一个 向量,因此将列表用作 a 的列始终是合法的 数据框。但是,base R 并不容易创建 list-columns,而 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 for Data Science 是否定义了 R 语言”。
  • 您可以在 data.frame 中有一个列表列。 df <- data.frame(y = 1:2);df$x <- list(1:3, 3:5)
  • @BenBolker 列表列的定义是什么?
  • @RonakShah 列表列的定义是什么?
  • 好的,删除了我的评论。 (请注意,上面出现的我的第一条评论,之前是我的第二条评论,不是@DirkEddelbuettel 反对的...)

标签: r


【解决方案1】:

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

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,请参阅this post 了解为什么 + 如何制作一列小标题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 2021-06-12
    • 1970-01-01
    • 2014-10-20
    • 2011-07-16
    • 1970-01-01
    相关资源
    最近更新 更多