R数据科学(R for Data Science)

Part 2:数据处理


导入——>整理——>转换

------------------第7章 使用tibble实现简单数据框-------------------

  1. #tibble一种简单数据框
  2. vignette("tibble")
  3. #创建tibble
  4. str(iris)
  5. str(as_tibble(iris))
  6. tibble(x=1:5,
  7. y=1,
  8. z=x^2+y)
  9. #tribble(transposed tibble)转置tibble,对数据按行进行编码
  10. tribble(~x,~y,~z,
  11. #--/--/----
  12. "a",2,3.6,
  13. "b",1,8.5)
  14. #tibble与data.frame的比较
  15. tibble(a=lubridate::now()+runif(1e3)*86400,
  16. b=lubridate::today()+runif(1e3)*30,
  17. c=1:1e3,
  18. d=runif(1e3),
  19. e=sample(letters,1e3,replace = T))
  20. flights %>% print(n=10,width=Inf) #打印所有列
  21. #flights %>% View()
  22. df <- tibble(x=runif(5),y=runif(5))
  23. df$x
  24. df[["x"]]
  25. df[[1]]
  26. df %>% .$x #管道连用需要占位符
  27. df %>% .[["x"]]
  28. df %>% .[[1]]
  29. #转换
  30. class(as.data.frame(tb))

---------------第8章 使用readr进行数据导入-------------------------------

  1. read_csv() # ,
  2. read_csv2() # ;
  3. read_tsv() # \t
  4. read_delim() # 任意分隔符
  5. read_fwf() # 固定宽度:fwf_widths按宽度设置域,fwf_position按位置设置域
  6. read_table() #固定宽度,空白符
  7. read_log() #apache风格的日志文件
  8. #csv文件是数据存储最常用的形式
  9. read_csv("a,b,c
  10. 1,2,3
  11. 4,5,6") #提供创建行内csv文件
  12. read_csv("test 1
  13. test 2
  14. x,y,z
  15. 1,2,3",skip=2) #skip跳过前两行
  16. read_csv("#test 1
  17. #test 2
  18. x,y,z
  19. 1,2,3",comment="#") #跳过以#开头的行
  20. read_csv("1,2,3\n4,5,6",col_names = F) #不将第一行视为列标题
  21. read_csv("1,2,3\n4,5,6",col_names = c("x","y","z")) #自定义列名
  22. read_csv("a,b,c\n1,2,.",na=".") #设定缺失值
  23. #与基础包比较
  24. #快;可生成tibble;易于重复
  25. #解析向量
  26. parse_logical(c("TRUE","FALSE","NA"))
  27. parse_integer(c("1","2","3"))
  28. parse_integer(c("1","2","."),na=".")
  29. (x <- parse_integer(c("1","2","ad","3.4"))) #解析失败
  30. problems(x) #解析失败很多时,获取完整的失败信息集合
  31. #①数值
  32. parse_double("1.23")
  33. parse_double("1,23",locale=locale(decimal_mark = ",")) #分组符号只能设逗号和点?
  34. parse_number("$1000")
  35. parse_number("20%")
  36. parse_number("it costs $123.45")
  37. parse_number("$123,456,789")
  38. #②字符串
  39. parse_character("el ni is a test")
  40. parse_character("El Ni\xf1 is a test",locale=locale(encoding = "Latin1"))
  41. #③因子
  42. parse_factor(c("apple","banana"))
  43. #④日期和时间
  44. parse_datetime("2010-01-11T2010")
  45. parse_datetime("20100111")
  46. parse_date("2010-10-10")
  47. parse_date("01/02/15","%m/%d/%y")
  48. parse_time("01:10 am")
  49. parse_time("20:10:01")
  50. #解析文件
  51. #readr使用一种启发式过程来确定每一列的类型:先读取1000行,然后再用某种启发式算法来确定每列的类型
  52. #parse_guess()猜测来解析列
  53. #会有一些问题:如NA过多、前1000行较特殊等
  54. #建议总是提供col_types参数
  55. #PS:读个文件,太他妈麻烦了,放弃不看!
  56. #写入文件
  57. write_csv()
  58. write_tsv()
  59. write_excel_csv()
  60. write_rds()

---------------第9章 使用dplyr处理关系数据--------------------------

  1. #即处理多个数据集:合并连接、筛选连接、集合操作
  2. library(nycflights13)
  3. flights
  4. airlines
  5. airports
  6. planes
  7. weather
  8. #键:连接每对数据集的变量;主键:该数据集观测的唯一标识;外键:另一数据集观测的唯一标识
  9. #识别主键并验证
  10. planes %>% count(tailnum) %>% filter(n>1) #检查没有重复
  11. #有些数据没有明确的主键:变量组合也不能明确标识
  12. flights %>% count(year,month,day,flight) %>% filter(n>1)
  13. #代理键:没有主键情况下创建的主键,mutate和row_number函数
  14. #关系:一对一,一对多,多对一,多对多
  15. #合并连接:
  16. flights2 <- flights %>% select(year:day,hour,origin,dest,tailnum,carrier)
  17. flights2
  18. flights2 %>% select(-origin,-dest) %>%
  19. left_join(airlines,by="carrier")
  20. #等同于
  21. flights2 %>% select(-origin,-dest) %>%
  22. mutate(name=airlines$name[match(carrier,airlines$carrier)])
  23. #合并方式:
  24. inner_join(x,y) #merge(x,y)
  25. left_join(x,y) #merge(x,y,all.x=T)
  26. right_join(x,y) #merge(x,y,all.y=T)
  27. full_join(x,y) #merge(x,y,all.x=T,all.y=T)
  28. #指定键(列)
  29. left_join(flights2,weather) #默认by=NULL,连接两个表中所有变量
  30. left_join(flights2,planes,by="tailnum") #指定公共变量
  31. left_join(flights2,airports,c("dest"="faa")) #匹配两个表的dest列和faa列
  32. #筛选连接
  33. semi_join(x,y) #保留和y表匹配的所有x表观测值
  34. anti_join(x,y) #丢弃...................
  35. top_dest <- flights %>% count(dest,sort = T) %>% head(10)
  36. top_dest #最受欢迎的top10目的地
  37. flights %>% filter(dest %in% top_dest$dest)
  38. #等于
  39. flights %>% semi_join(top_dest)
  40. flights %>% anti_join(planes,by="tailnum") %>% count(tailnum,sort = T)
  41. #集合操作:整行比较
  42. intersect(x,y)
  43. union(x,y)
  44. setdiff(x,y)#x有,y没有

---------------第10章 使用stringr处理字符串---------------------

  1. x <- c("\"","\\")
  2. x
  3. writeLines(x) #查看字符串原始内容
  4. #字符串长度
  5. str_length(c("a","r for data science",NA))
  6. #字符串组合
  7. str_c("x","y")
  8. str_c("x","y",sep = ",")
  9. x <- c("abc",NA)
  10. str_c("|-",x,"-|")
  11. str_c("|-",str_replace_na(x),"-|")
  12. #向量化
  13. str_c("pre-",c("a","b","c"),"-suffix")
  14. #字符串取子集
  15. x <- c("Apple","Banana","Pear")
  16. str_sub(x,1,3)
  17. str_sub(x,-3,-1)
  18. str_sub("a",1,5)
  19. str_to_upper(x)
  20. str_to_lower(x)
  21. #排序
  22. str_sort(x)
  23. str_order(x)
  24. #正则表达式匹配
  25. str_view(x,"an")
  26. str_view(x,".a.") #匹配换行符外的任意字符
  27. #转义
  28. dot <- "\\."
  29. writeLines(dot)
  30. str_view(c("abc","a.c","bef"),"a\\.c")
  31. x <- "a\\b"
  32. writeLines(x)
  33. str_view(x,"\\\\")
  34. #锚点
  35. x <- c("apple","apple pie","banana","pear")
  36. str_view(x,"^a")
  37. str_view(x,"a$")
  38. str_view(x,"apple")
  39. str_view(x,"^apple$")
  40. str_view(x,"\bapple\b") #\b匹配单词边界 error?
  41. #字符类
  42. # \d:任意数字
  43. # \s:任意空白字符(空格、制表符、换行符)
  44. # [abc]:a或b或c
  45. # [^abc]:除a/b/c外的任意字符
  46. str_view(c("grey","gray"),"gr(e|a)y")
  47. #重复
  48. x <- "this is a test: MDCCCCCCLXXXXIIIV"
  49. str_view(x,"CC?") #? 0或1次
  50. str_view(x,"CC+") #+ 1或多次
  51. str_view(x,"CC*") #* 0或多次
  52. str_view(x,"C[LX]+")
  53. str_view(x,"C{2}") #2次
  54. str_view(x,"C{2,}") #至少2次
  55. str_view(x,"C{2,4}") #2-4次
  56. #默认贪婪匹配
  57. #懒惰模式
  58. str_view(x,"C{2,3}?")
  59. str_view(x,"C[LX]+?")
  60. #分组与回溯引用
  61. fruit
  62. str_view(fruit,"(..)\\1",match = T)
  63. #相对于创建一个复杂的正则表达式,不如创建多个简单的正则表达式
  64. #匹配检测
  65. x <- c("apple","banana","pear")
  66. str_detect(x,"e") #返回逻辑值
  67. words
  68. sum(str_detect(words,"^t")) #统计匹配个数
  69. mean(str_detect(words,"[aeiou]$")) #元音字母结尾的单词的比例
  70. #取元素
  71. words[str_detect(words,"x$")]
  72. str_subset(words,"x$")
  73. #数据框取元素
  74. df <- tibble(word=words,i=seq_along(word))
  75. df
  76. df %>% filter(str_detect(words,"x$"))
  77. #返回匹配数量
  78. str_count(x,"a")
  79. mean(str_count(words,"[aeiou]")) #平均数目
  80. df %>% mutate(vowels=str_count(word,"[aeiou]"),
  81. consonants=str_count(word,"[^aeiou]"))
  82. str_count("abababa","aba") #匹配2次,不会重叠
  83. str_view_all("abababa","aba")
  84. #stringr的函数都是成对的:后缀加_all的用于全部匹配,没加的单个匹配
  85. #提取匹配内容
  86. stringr::sentences
  87. length(sentences)
  88. #想要从中找出所有含有颜色的句子
  89. colors <- c("red","orange","yellow","green","blue","purple")
  90. color_match <- str_c(colors,collapse = "|") #以|连接
  91. has_color <- str_subset(sentences,color_match) #匹配的句子
  92. matches <- str_extract(has_color,color_match) #匹配的元素,每个句子只提取第一个匹配
  93. head(matches)
  94. more <- sentences[str_count(sentences,color_match)>1]
  95. str_view_all(more,color_match)
  96. str_extract(more,color_match)
  97. str_extract_all(more,color_match) #提取多个匹配元素,返回列表
  98. str_extract_all(more,color_match,simplify = T) #返回矩阵
  99. #分组匹配
  100. str_match()
  101. #替换匹配内容
  102. x <- c("apple","banana","pear")
  103. str_replace(x,"[aeiou]","-")
  104. str_replace_all(x,"[aeiou]","-")
  105. #同时多个替换
  106. x <- c("1 hours","2 cars","3 people")
  107. str_replace_all(x,c("1"="one","2"="two","3"="three"))
  108. #拆分
  109. sentences %>% head(5) %>% str_split(" ") #返回列表
  110. sentences %>% head(5) %>% str_split(" ",simplify = T) #返回矩阵
  111. sentences %>% head(5) %>% str_split(" ",n=2,simplify = T) #只拆分2段
  112. #定位匹配内容
  113. str_locate(x,"rs$")
  114. #其他模式
  115. str_view(fruit,"nana") #是以下函数的简写
  116. str_view(fruit,regex("nana"))
  117. str_view(fruit,regex("nana",ignore_case = T)) #忽略大小写
  118. #regex其他参数:multiline=T/F, comments=T/F, dotall=T/F
  119. #fixed函数
  120. #coll函数
  121. #boundar函数
  122. #R基础函数妙用:
  123. apropos("replace") #在环境中搜索可用的对象,不能想起函数名时用
  124. dir(pattern="\\.Rmd$") #列出目录下所有文件

--------------第11章 使用forcats处理因子------------

  1. factor()
  2. levels()
  3. forcats::gss_cat #社会调查数据
  4. gss_cat %>% count(race)
  5. #修改因子水平顺序和值
  6. gss_cat %>% count(partyid)
  7. gss_cat %>% mutate(partyid=fct_recode(partyid,
  8. "new1"="No answer",
  9. "new2"="Other party")) %>% count(partyid)
  10. #---------------第12章 使用lubridate处理日期和时间------------------------
  11. library(lubridate)
  12. today()
  13. now()
  14. #略

R数据科学-2的更多相关文章

  1. 学习《R数据科学》高清中文PDF+高清英文PDF+源代码

    学习R有不会的就查工具书<R数据科学>, 工具不是重点,创造价值才是目的.具体到数据科学,表现形式往往是提供解决方案或者做出某种决策.至于使用什么语言,采用什么工具,不本质.用 R 还是 ...

  2. R数据科学-3

    R数据科学(R for Data Science) Part 3:编程 转换--可视化--模型 --------------第13章 使用magrittr进行管道操作----------------- ...

  3. R数据科学-1

    R数据科学(R for Data Science) Part 1:探索 by: PJX for 查漏补缺 exercise: https://jrnold.github.io/r4ds-exercis ...

  4. 深入对比数据科学工具箱:Python和R之争

    建议:如果只是处理(小)数据的,用R.结果更可靠,速度可以接受,上手方便,多有现成的命令.程序可以用.要自己搞个算法.处理大数据.计算量大的,用python.开发效率高,一切尽在掌握. 概述 在真实的 ...

  5. 数据科学实战手册(R+Python)书中引用资料网址

    本文会持续将<数据科学实战手册(R+Python)>一书中的附带参考资料网址手打出来, 方便访问. 由于书中的参考资料网址太多, 这个文档将可能花费一段时间才能完成. 第一章 P7  Rs ...

  6. (数据科学学习手札07)R在数据框操作上方法的总结(初级篇)

    上篇我们了解了Python中pandas内封装的关于数据框的常用操作方法,而作为专为数据科学而生的一门语言,R在数据框的操作上则更为丰富精彩,本篇就R处理数据框的常用方法进行总结: 1.数据框的生成 ...

  7. R学习:《机器学习与数据科学基于R的统计学习方法》中文PDF+代码

    当前,机器学习和数据科学都是很重要和热门的相关学科,需要深入地研究学习才能精通. <机器学习与数据科学基于R的统计学习方法>试图指导读者掌握如何完成涉及机器学习的数据科学项目.为数据科学家 ...

  8. 机器学习与数据科学 基于R的统计学习方法(基础部分)

    1.1 机器学习的分类 监督学习:线性回归或逻辑回归, 非监督学习:是K-均值聚类, 即在数据点集中找出“聚类”. 另一种常用技术叫做主成分分析(PCA) , 用于降维, 算法的评估方法也不尽相同. ...

  9. [数据科学] 从text, json文件中提取数据

    文本文件是基本的文件类型,不管是csv, xls, json, 还是xml等等都可以按照文本文件的形式读取. #-*- coding: utf-8 -*- fpath = "data/tex ...

随机推荐

  1. 灵光一闪!帮你使用Vue,搞定无法解决的“动态挂载”

    在一些特殊场景下,使用组件的时机无法确定,或者无法在Vue的template中确定要我们要使用的组件,这时就需要动态的挂载组件,或者使用运行时编译动态创建组件并挂载. 今天我们将带大家从实际项目出发, ...

  2. 用cmd命令行创建vue项目模板

    1.进入cmd命令行 输入存放项目的位置 2.通过vue create 项目名称 创建项目 3.选择Manually select features 4.通过空格选中第1.2.5.6.7.去掉8 4. ...

  3. 搬运3:welpwnctf题目

    记录一道自己做的ctf题目:welpwn --RCTF-2015 1.老生常谈checksec查看: 可以看到只开了nx保护,下面我们进入ida下面看看. 发现是一个想rbp-400,rsp+0h的地 ...

  4. 嵌入式大佬给你分析stm32串口

    stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...

  5. linux上docker形式部署GB28181服务wvp,zlmedia

    目录 1.bash方式从镜像创建docker 2.下载vim 3.修改run.sh bug如下 4.修改application.xml 5.运行一下sh run.sh 6.Vim config.ini ...

  6. 转载: VIVADO的增量综合流程

    http://xilinx.eetrend.com/content/2019/100044286.html 从 Vivado 2019.1 版本开始,Vivado 综合引擎就已经可以支持增量流程了.这 ...

  7. 把数组排成最小的数 牛客网 剑指Offer

    把数组排成最小的数 牛客网 剑指Offer 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能 ...

  8. PHP笔记3__简易计算器

    <?php header("Content-type: text/html; charset=utf-8"); error_reporting(E_ALL & ~E_ ...

  9. Flink入门-第一篇:Flink基础概念以及竞品对比

    Flink入门-第一篇:Flink基础概念以及竞品对比 Flink介绍 截止2021年10月Flink最新的稳定版本已经发展到1.14.0 Flink起源于一个名为Stratosphere的研究项目主 ...

  10. mongodb入门命令-创建表数据(二)

    1.mongodb入门命令 1.1 show databases; 或 show dbs; //查看当前的数据库 > show dbs; admin 0.000GB config 0.000GB ...