前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >《高效R语言编程》6--高效数据木匠

《高效R语言编程》6--高效数据木匠

作者头像
用户1075469
发布2021-07-27 16:00:01
1.9K0
发布2021-07-27 16:00:01
举报
文章被收录于专栏:科技记者

将你的数据整理好是一个可敬的、某些情况下是至关重要的技能,所以作者使用了数据木匠这个词。这是本书最重要的一章,将涉及以下内容:

  • 使用tidyr整理数据
  • 使用dplyr处理数据
  • 使用数据库
  • 使用data.table处理数据

软件配置

代码语言:javascript
复制
library("tibble")
library("tidyr")
library("stringr")
library("readr")
library("dplyr")
library("data.table")

高效的tibble包

tibble定义了新的数据框,更加易用。

  • tibble会打印每个变量的类,data.frame不会
  • stringAsFactors默认不转换
  • 输出时,只输出前10行

使用tidyr与正则表达式整理数据

整理数据包括数据清理和数据重构,前者是重定格式与标记脏数据,stringi和stringr可以通过正则表达式更新脏字符串,assertive和assertr包可以在数据分析项目的一开始进行数据完整性的校验。通常的数据清理是将非标准文本字符串转换成lubridate简介所描述的数据格式。vignette("lubridate")

整洁是个广泛的概念,也包括重构数据,以便有利于数据分析和建模。R语言运行几个长列比运行一些短列快,所以一般认为宽数据(不整洁),长数据(整洁)。

tidyr方便了收集与分割两个常见的操作

gather()收集是将列名换成新变量,将宽表变成长表,spread()是实现相反过程的函数。用法是:gather(data,key,value,-religion),分别是数据框,要转换成分类的列名,单元值的列名和清除收集的变量

使用seperate()分割联合变量

分割是指将一个实际由两个变量组成的变量分割成两个独立列

代码语言:javascript
复制
library(tidyr)
agesex <- c("m0-10","f0-10")
n <- c(3,5)
agesex_df <- tibble(agesex,n)
# A tibble: 2 x 2
  agesex     n
  <chr>  <dbl>
1 m0-10      3
2 f0-10      5
separate(agesex_df,col=agesex,into=c("age","sex"))
# A tibble: 2 x 3
  age   sex       n
  <chr> <chr> <dbl>
1 m0    10        3
2 f0    10        5

其他tidyr函数

broom包提供了模型结果的标准输出格式bit.ly[1] P.s,不知道为啥,这网站还得过墙,难道这是架设在了谷哥的服务器上。

使用broom::tidy()广泛应用于模型数据,并以标准数据框格式返回模型输出。使用变量名非标准化求值更高效,见R语言 dplyr传递参数_自由 平等~忠诚 奉献-CSDN博客[2]。只是函数名多了个下划线那么简单吗?

正则表达式

R与stringr分别使用grepl()和str_detect()来进行,我比较喜欢基础R的,不知你喜欢安装包还是用基本的。

使用dplyr高效处理数据

这个包名的意思是数据框钳,相比基础R的优点是运行更快、与整洁数据和数据库配合好。函数名的部分灵感来自SQL。

与基本R中类似函数不同,变量无需使用 $ 操作符就可直接使用,设计与magrittr包的%>%管道操作符一起使用,以允许每个数据阶段写成新的一行。其是一个大型包,本身可以看成一门语言。

列改名

rename(),使用反引号‘`’包裹,允许R使用不规范的列名。

改变列的分类

R对象的类是性能的关键,as.numeric()、data.matrix()等改变类,或者vapply(data, class,chracter(1))。unlist()函数的作用,就是将list结构的数据,变成非list的数据,即将list数据变成字符串向量或者数字向量的形式。

滤除行

filter() ## 键操作

数据聚合

基于组合变量生成数据汇总,以前称为split-apply-combine。summarize是一个多面手,用于返回自定义范围的汇总统计值。

非标准计算

代码中没有引号包裹的原始名字,这种方式叫做非标准计算(NSE),高效交互使用函数,减少键盘输入,允许Rstudio中自动完成。还是函数名多个_。

合并数据集

代码语言:javascript
复制
# 安装包
install.packages("ggmap","maps")
library(ggmap)
world <- map_data("world")
names(world)
# [1] "long"      "lat"       "group"     "order"     "region"   
[6] "subregion"

# 使用数据库 R会把所有数据加载到内存中,数据库是从硬盘中获取数据的。RODBC是一个资深包,提供R与SQL server的接口。DBI包提供了通用接口与驱动程序的类集,如RSQLITE,是访问数据库的统一框架,允许其他驱动程序以模块包添加。这里建议不要把数据库密码和API密钥等放在命令中,而要放大.Renviron文件中。dbConnect()函数连接数据库,dbSendQuery()查询,dbFetch()加载到R中。mongolite包可以连接MongoDB,MonetDB也可以。

数据库与dplyr

必须使用src_*()函数创建一个数据源。# 使用data.table()处理数据 是dplyr的替代,两个哪个好存在争议,最好学一个一直坚持下去。如果两个都是新手,推荐dplyr。为了提升性能,可以设置键,类似数据库的主键,方便二进制算法提取目标子集行。

参考资料

[1]

bit.ly: http://bit.ly/broomvignette

[2]

R语言 dplyr传递参数_自由 平等~忠诚 奉献-CSDN博客: https://blog.csdn.net/tanzuozhev/article/details/50597233

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科技记者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件配置
  • 高效的tibble包
  • 使用tidyr与正则表达式整理数据
  • tidyr方便了收集与分割两个常见的操作
  • 使用seperate()分割联合变量
  • 其他tidyr函数
  • 正则表达式
  • 使用dplyr高效处理数据
    • 列改名
      • 改变列的分类
        • 滤除行
          • 数据聚合
            • 参考资料
        • 非标准计算
        • 合并数据集
        • 数据库与dplyr
        相关产品与服务
        数据库
        云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档