r - 列表列是 R 语言中的一个概念吗?
问题描述
列表列数据结构是 R 语言中的一个概念吗?
什么是列表列?将数据框视为列列表时,列表列是数据框中的列吗?
列表列隐含在数据框的定义中:数据框是等长向量的命名列表。列表是一个向量,因此将列表用作数据框的列始终是合法的。但是,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 和 中的列表列概念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,请参阅这篇文章以了解为什么+如何制作小标题列表的一列。
推荐阅读
- python - 熊猫添加缺失的行
- ios - 在 Swift 中实现一个可关闭的 UIView(不是 UIViewController!)
- python - 将python dict返回到QML(PySide2)
- ios - 自定义单元格和对象类中的首选状态栏隐藏
- eclipse - 如何在 dockerfile 中包含本地语言服务器并从中构建 docker 映像?
- python - 来自现有索引字符串的 Pandas 多索引
- android - PlayStore 是否会使屏幕截图变暗?
- zk - 如何引用具有动态 id 的 zul 组件,例如 id="calendarDecorate_${vmStatus.index}"?
- sql - 错误的 SQL 聚合结果
- typescript - RxJS6:为什么 observable Pipe 运算符只接收 OperatorFunction 而不是 MonoTypeOperatorFunction