R语言数据的新类型tibble(dataframe的加强版)

前言

data.frame:最基本,大多函数的设计基于此种结构;读写速度一般
data.table:在data.frame上的改进,读写速度最快;加入了索引操作,结合索引数据处理更方便
tibble:主要在dplyr和tibble包中有效,主要关注于list,支持整洁格式;数据进行懒加载。也就是说,最大的好处是tibble中的元素可以是list类型

用法

加载

可以单独加载也可以通过tidyverse套装进行加载

library(pacman)
p_load(tidyverse)

创建

#1.创建一个tibble类型的数据框
t1<-tibble(x = 1:10, y =LETTERS[1:10])
t1
# A tibble: 10 x 2
       x y    
   <int> <chr>
 1     1 A    
 2     2 B    
 3     3 C    
 4     4 D    
 5     5 E    
 6     6 F    
 7     7 G    
 8     8 H    
 9     9 I    
10    10 J

查看属性

#2.查看t1属性
class(t1)    
#[1] "tbl_df"     "tbl"        "data.frame"
#判断是不是tibble类型
is_tibble(t1)
# [1] TRUE
#查看t1的属性
attributes(t1)
# $names
# [1] "x" "y"
# 
# $row.names
# [1]  1  2  3  4  5  6  7  8  9 10
# 
# $class
# [1] "tbl_df"     "tbl"        "data.frame"
#查看t1的静态结构
str(t1)
glimpse(t1)
# Observations: 10
# Variables: 2
# $ x <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
# $ y <chr> "A", "B", "C", "D", "E", "F", "G", "H", "I", "J"

数据类型转换

#3.数据类型转换
d1<-data.frame(x = 1:5, y =LETTERS[1:5])  #data.frame
d1
#   x y
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
# 5 5 E
#data.frame -> tibble
d2<-as_tibble(d1)
d2
# # A tibble: 5 x 2
# x y    
# <int> <fct>
#   1     1 A    
# 2     2 B    
# 3     3 C    
# 4     4 D    
# 5     5 E 
#tibble -> data.frame
as.data.frame(d2)
#   x y
# 1 1 A
# 2 2 B
# 3 3 C
# 4 4 D
# 5 5 E


#list与tibble可以互相转换
a=tibble(x = list(diag(1), diag(2)));a
# # A tibble: 2 x 1
# x                
# <list>           
#   1 <dbl[,1] [1 x 1]>
#   2 <dbl[,2] [2 x 2]>
as.list(a)
# $x
# $x[[1]]
# [,1]
# [1,]    1
# 
# $x[[2]]
# [,1] [,2]
# [1,]    1    0
# [2,]    0    1

数据查询

#4.tibble数据查询,和dataframe是一样的
#法一:[]按列取,返回tibble
t1[2]
#法二:[[]]或$按列取,返回向量
t1$x
t1[[2]]
#按行取数据,这时一定要用,来做分隔符
t1[1:2,]
t1[1:2, 1]

数据操作

#5.tibble数据操作
#没有改变原数据的值,需要新赋值
#增加一列
add_column(t1, z = 0:9, w = 0)
#在最后,增加一行
add_row(t1, x = 99, y = 9)
#在第二行位置,增加一行
add_row(t1, x = 99, y = 9, .before = 2)

用于处理data.frame的新函数

#6.用于处理data.frame函数
#tibble还提供了一些用于处理data.frame的函数【行列名】
d1
#判断是否有叫x的列
has_name(d1,'x')
#判断是否有行名
has_rownames(d1)
#给d1增加行名
row.names(d1) <- LETTERS[1:5]; d1
#去掉行名
remove_rownames(d1)
#把行名转换为单独的一列
df2<-rownames_to_column(d1, var = "rowname"); df2
#把行索引转换为单独的一列
rowid_to_column(d1, var = "rowid")

相关参考

https://blog.csdn.net/fens/article/details/84634531
https://blog.csdn.net/weixin_43633501/article/details/91353834

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值