💡
tibble 是 tidyverse 核心包之一,被定义为取代传统 data.frame 的数据类型。
它在保持与 data.frame 兼容的同时,带来了更友好的打印输出、更严格的子集操作和更智能的类型处理。
1. 创建 tibble
# 加载包 suppressMessages(library(tidyverse)) # 创建 tibble t1 <- tibble(1:10, b = LETTERS[1:10]) head(t1) # 创建 data.frame 对比 d1 <- data.frame(1:10, b = LETTERS[1:10]) head(d1)
📌 注意:tibble 输出时会多一行,显示每列的数据类型!
tibble 的 7 种数据类型缩写
int → integer(整数)
dbl → double(双精度浮点)
chr → character(字符串)
dttm → date-time(日期时间)
lgl → logical(逻辑值 TRUE/FALSE)
fctr → factor(因子)
date → date(日期)
2. 类型继承关系
# 查看类型 class(t1) # [1] "tbl_df" "tbl" "data.frame" str(t1) class(d1) # [1] "data.frame"
💡 关键洞察:tibble 是 data.frame 的子类型!这意味着所有针对 data.frame 的函数都可以用于 tibble。
3. 数据类型转换
# data.frame → tibble d1 <- data.frame(1:5, b = LETTERS[1:5]) d2 <- as_tibble(d1) # 注意是下划线,不是句点! # tibble → data.frame as.data.frame(d2)
⚠️ 常见错误:不要写成 as.tibble(),应该是 as_tibble()(下划线)!
tibble 可以与 data.frame、list、matrix 之间平滑转换,但 不能直接与 vector 转换。
4. tibble 数据操作
library(tibble) df <- tibble(x = 1:3, y = 3:1) # 添加列 add_column(df, z = -1:1, w = 0) # 添加行 add_row(df, x = 99, y = 9) # 在指定位置插入行 add_row(df, x = 99, y = 9, .before = 2)
5. 输出对比
tb <- tibble( a = 1:5, b = a * 2, c = NA, d = 'a', e = letters[1:5] ) head(tb) # tibble 只显示适合屏幕的行数,不会打印大量数据 # 同时显示列的类型信息
💡 优势:当数据量大时,tibble 自动截断输出,避免屏幕被刷屏!
6. data.frame 工具函数
df <- data.frame(x = 1:3, y = 3:1) row.names(df) <- LETTERS[1:3] # 检查是否有某列 has_name(df, 'x') # 检查是否有行名 has_rownames(df) # 行名转为列 df2 <- rownames_to_column(df, var = "rowname") # 列转为行名 column_to_rownames(df2, var = "rowname")
这些函数主要用于 data.frame 到 tibble 的转换,因为 tibble 没有行名 的概念。
📝 总结
✅ tibble 优势
- • 更友好的打印输出
- • 更严格的子集操作(不部分匹配)
- • 支持列表列
- • 与 tidyverse 完美兼容
🔄 兼容性
- • tibble 是 data.frame 子类
- • 所有 data.frame 函数可用
- • 平滑类型转换
- • 无缝集成现有代码