在网上找了很久关于数据转换的,都没有找到比较好的。现在为大家整理一下。按照我自己的思路。当然也是为了自己做笔记。

为了方便,大家可以统一安装一个系列的包,这个只需要安装tidyverse这个包就可以,它会安装一系列的数据处理的包,比如ggplot2,dplyr等主力的包。

  1. #安装tidyverse包
  2. install.packages('tidyverse')
  3. #加载这个包
  4. library(tidyverse)

  我现在使用的版本如下:

  1. #需要先安装devtools这个包
  2. > devtools::session_info(c('tidyverse'))
  3. Session info -------------------------------------------------------------------------------
  4. setting value
  5. version R version 3.4.4 (2018-03-15)
  6. system x86_64, mingw32
  7. ui RStudio (1.1.442)
  8. language (EN)
  9. collate Chinese (Simplified)_China.936
  10. tz Asia/Taipei
  11. date 2018-04-11
  12.  
  13. Packages -----------------------------------------------------------------------------------
  14. package * version date source
  15. assertthat 0.2.0 2017-04-11 CRAN (R 3.4.4)
  16. backports 1.1.2 2017-12-13 CRAN (R 3.4.3)
  17. base64enc 0.1-3 2015-07-28 CRAN (R 3.4.1)
  18. BH 1.66.0-1 2018-02-13 CRAN (R 3.4.3)
  19. bindr 0.1.1 2018-03-13 CRAN (R 3.4.4)
  20. bindrcpp 0.2 2017-06-17 CRAN (R 3.4.4)
  21. broom 0.4.3 2017-11-20 CRAN (R 3.4.3)
  22. callr 2.0.2 2018-02-11 CRAN (R 3.4.4)
  23. cellranger 1.1.0 2016-07-27 CRAN (R 3.4.4)
  24. cli 1.0.0 2017-11-05 CRAN (R 3.4.4)
  25. colorspace 1.3-2 2016-12-14 CRAN (R 3.4.4)
  26. compiler 3.4.4 2018-03-15 local
  27. crayon 1.3.4 2017-09-16 CRAN (R 3.4.4)
  28. curl 3.1 2017-12-12 CRAN (R 3.4.3)
  29. DBI 0.8 2018-03-02 CRAN (R 3.4.4)
  30. dbplyr 1.2.1 2018-02-19 CRAN (R 3.4.4)
  31. debugme 1.1.0 2017-10-22 CRAN (R 3.4.4)
  32. dichromat 2.0-0 2013-01-24 CRAN (R 3.4.1)
  33. digest 0.6.15 2018-01-28 CRAN (R 3.4.3)
  34. dplyr 0.7.4 2017-09-28 CRAN (R 3.4.3)
  35. evaluate 0.10.1 2017-06-24 CRAN (R 3.4.4)
  36. forcats 0.3.0 2018-02-19 CRAN (R 3.4.4)
  37. foreign 0.8-69 2017-06-22 CRAN (R 3.4.4)
  38. ggplot2 2.2.1 2016-12-30 CRAN (R 3.4.4)
  39. glue 1.2.0 2017-10-29 CRAN (R 3.4.4)
  40. graphics * 3.4.4 2018-03-15 local
  41. grDevices * 3.4.4 2018-03-15 local
  42. grid 3.4.4 2018-03-15 local
  43. gtable 0.2.0 2016-02-26 CRAN (R 3.4.4)
  44. haven 1.1.1 2018-01-18 CRAN (R 3.4.4)
  45. highr 0.6 2016-05-09 CRAN (R 3.4.4)
  46. hms 0.4.2 2018-03-10 CRAN (R 3.4.4)
  47. htmltools 0.3.6 2017-04-28 CRAN (R 3.4.4)
  48. httr 1.3.1 2017-08-20 CRAN (R 3.4.4)
  49. jsonlite 1.5 2017-06-01 CRAN (R 3.4.4)
  50. knitr 1.20 2018-02-20 CRAN (R 3.4.4)
  51. labeling 0.3 2014-08-23 CRAN (R 3.4.1)
  52. lattice 0.20-35 2017-03-25 CRAN (R 3.4.4)
  53. lazyeval 0.2.1 2017-10-29 CRAN (R 3.4.4)
  54. lubridate 1.7.2 2018-02-06 CRAN (R 3.4.3)
  55. magrittr 1.5 2014-11-22 CRAN (R 3.4.4)
  56. markdown 0.8 2017-04-20 CRAN (R 3.4.4)
  57. MASS 7.3-49 2018-02-23 CRAN (R 3.4.4)
  58. methods * 3.4.4 2018-03-15 local
  59. mime 0.5 2016-07-07 CRAN (R 3.4.1)
  60. mnormt 1.5-5 2016-10-15 CRAN (R 3.4.1)
  61. modelr 0.1.1 2017-07-24 CRAN (R 3.4.4)
  62. munsell 0.4.3 2016-02-13 CRAN (R 3.4.4)
  63. nlme 3.1-131.1 2018-02-16 CRAN (R 3.4.4)
  64. openssl 1.0.1 2018-03-03 CRAN (R 3.4.4)
  65. parallel 3.4.4 2018-03-15 local
  66. pillar 1.2.1 2018-02-27 CRAN (R 3.4.4)
  67. pkgconfig 2.0.1 2017-03-21 CRAN (R 3.4.4)
  68. plogr 0.2.0 2018-03-25 CRAN (R 3.4.4)
  69. plyr 1.8.4 2016-06-08 CRAN (R 3.4.4)
  70. praise 1.0.0 2015-08-11 CRAN (R 3.4.4)
  71. psych 1.7.8 2017-09-09 CRAN (R 3.4.4)
  72. purrr 0.2.4 2017-10-18 CRAN (R 3.4.4)
  73. R6 2.2.2 2017-06-17 CRAN (R 3.4.4)
  74. RColorBrewer 1.1-2 2014-12-07 CRAN (R 3.4.1)
  75. Rcpp 0.12.16 2018-03-13 CRAN (R 3.4.4)
  76. readr 1.1.1 2017-05-16 CRAN (R 3.4.4)
  77. readxl 1.0.0 2017-04-18 CRAN (R 3.4.4)
  78. rematch 1.0.1 2016-04-21 CRAN (R 3.4.4)
  79. reprex 0.1.2 2018-01-26 CRAN (R 3.4.4)
  80. reshape2 1.4.3 2017-12-11 CRAN (R 3.4.4)
  81. rlang 0.2.0 2018-02-20 CRAN (R 3.4.4)
  82. rmarkdown 1.9 2018-03-01 CRAN (R 3.4.4)
  83. rprojroot 1.3-2 2018-01-03 CRAN (R 3.4.4)
  84. rstudioapi 0.7 2017-09-07 CRAN (R 3.4.4)
  85. rvest 0.3.2 2016-06-17 CRAN (R 3.4.4)
  86. scales 0.5.0 2017-08-24 CRAN (R 3.4.4)
  87. selectr 0.3-2 2018-03-05 CRAN (R 3.4.4)
  88. stats * 3.4.4 2018-03-15 local
  89. stringi 1.1.7 2018-03-12 CRAN (R 3.4.4)
  90. stringr 1.3.0 2018-02-19 CRAN (R 3.4.4)
  91. testthat 2.0.0 2017-12-13 CRAN (R 3.4.4)
  92. tibble 1.4.2 2018-01-22 CRAN (R 3.4.4)
  93. tidyr 0.8.0 2018-01-29 CRAN (R 3.4.4)
  94. tidyselect 0.2.4 2018-02-26 CRAN (R 3.4.4)
  95. tidyverse 1.2.1 2017-11-14 CRAN (R 3.4.4)
  96. tools 3.4.4 2018-03-15 local
  97. utf8 1.1.3 2018-01-03 CRAN (R 3.4.4)
  98. utils * 3.4.4 2018-03-15 local
  99. viridisLite 0.3.0 2018-02-01 CRAN (R 3.4.4)
  100. whisker 0.3-2 2013-04-28 CRAN (R 3.4.4)
  101. withr 2.1.2 2018-03-15 CRAN (R 3.4.4)
  102. xml2 1.2.0 2018-01-24 CRAN (R 3.4.4)
  103. yaml 2.1.18 2018-03-08 CRAN (R 3.4.4)

  我们选取一个航班的数据集,这个数据在下面这个包里面,也需要安装

  1. #安装这个包
  2. install.packages('nycflights13')
  3. #加载这个包
  4. library(nycflights13)

  查看这个数据集(这个数据集包含2013年从纽约市出发的所有336778架航班)

  1. > flights
  2. # A tibble: 336,776 x 19
  3. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
  4. <int> <int> <int> <int> <int> <dbl> <int> <int> <dbl>
  5. 1 2013 1 1 517 515 2. 830 819 11.
  6. 2 2013 1 1 533 529 4. 850 830 20.
  7. 3 2013 1 1 542 540 2. 923 850 33.
  8. 4 2013 1 1 544 545 -1. 1004 1022 -18.
  9. 5 2013 1 1 554 600 -6. 812 837 -25.
  10. 6 2013 1 1 554 558 -4. 740 728 12.
  11. 7 2013 1 1 555 600 -5. 913 854 19.
  12. 8 2013 1 1 557 600 -3. 709 723 -14.
  13. 9 2013 1 1 557 600 -3. 838 846 -8.
  14. 10 2013 1 1 558 600 -2. 753 745 8.
  15. # ... with 336,766 more rows, and 10 more variables: carrier <chr>, flight <int>,
  16. # tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
  17. # minute <dbl>, time_hour <dttm>

  这个数据集其实是tibbles格式的,和R的普通的data.frame格式不一样。但是差不多。在这个列名称的下面会有这列的格式,比如int是整形的,dbl是双精度型的,当然啦,R和别的语言不一样,我觉得不要太关注他们的数据格式,大概知道哪些是连续的、哪些是离散的、哪些是字符型的,当然在特殊的情况下,需要考虑,我们现在就暂时不考虑。

好了好了,这些准备的东西就介绍到这吧。进入正题:

dplyr有几个主要的函数。如下:

filter()——这个是按照他的值进行筛选

arrange()——这个就是排序呀!

select()——这个是通过变量名选择变量

mutate()——这个是用现有的变量函数创建新变量

summarize()——这个是将许多值折叠为单个摘要(通常和group_by()函数在一起用,别说是我说的,我就是先透漏一下)

filter()函数

  1. > filter(flights,month == 1,day == 1)
  2. # A tibble: 842 x 19
  3. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  4. <int> <int> <int> <int> <int> <dbl> <int> <int>
  5. 1 2013 1 1 517 515 2. 830 819
  6. 2 2013 1 1 533 529 4. 850 830
  7. 3 2013 1 1 542 540 2. 923 850
  8. 4 2013 1 1 544 545 -1. 1004 1022
  9. 5 2013 1 1 554 600 -6. 812 837
  10. 6 2013 1 1 554 558 -4. 740 728
  11. 7 2013 1 1 555 600 -5. 913 854
  12. 8 2013 1 1 557 600 -3. 709 723
  13. 9 2013 1 1 557 600 -3. 838 846
  14. 10 2013 1 1 558 600 -2. 753 745
  15. # ... with 832 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
  16. # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
  17. # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

  上面这个意思很明显,就是选择在这数据集中,month等于1且day等于1的行。看吧,很简单吧,这个是生成一个新的数据,不对原来的数据框进行修改。

例如:

  1. > (dec25 <- filter(flights,month == 1,day == 25))
  2. # A tibble: 922 x 19
  3. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  4. <int> <int> <int> <int> <int> <dbl> <int> <int>
  5. 1 2013 1 25 15 1815 360. 208 1958
  6. 2 2013 1 25 17 2249 88. 119 2357
  7. 3 2013 1 25 26 1850 336. 225 2055
  8. 4 2013 1 25 123 2000 323. 229 2101
  9. 5 2013 1 25 123 2029 294. 215 2140
  10. 6 2013 1 25 456 500 -4. 632 648
  11. 7 2013 1 25 519 525 -6. 804 820
  12. 8 2013 1 25 527 530 -3. 820 829
  13. 9 2013 1 25 535 540 -5. 826 850
  14. 10 2013 1 25 539 540 -1. 1006 1017
  15. # ... with 912 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
  16. # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
  17. # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

  当然,也可以用一些逻辑符号,只要你逻辑清楚,都可以用,你只要保证你的数据集在filte()函数的最前面的位置,后面尽管添加约束条件。比如你可以这样做:

  1. > filter(flights,month == 11 | month == 12)#这个是选择month等于11和等于12的列
  2. # A tibble: 55,403 x 19
  3. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  4. <int> <int> <int> <int> <int> <dbl> <int> <int>
  5. 1 2013 11 1 5 2359 6. 352 345
  6. 2 2013 11 1 35 2250 105. 123 2356
  7. 3 2013 11 1 455 500 -5. 641 651
  8. 4 2013 11 1 539 545 -6. 856 827
  9. 5 2013 11 1 542 545 -3. 831 855
  10. 6 2013 11 1 549 600 -11. 912 923
  11. 7 2013 11 1 550 600 -10. 705 659
  12. 8 2013 11 1 554 600 -6. 659 701
  13. 9 2013 11 1 554 600 -6. 826 827
  14. 10 2013 11 1 554 600 -6. 749 751
  15. # ... with 55,393 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
  16. # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
  17. # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  18. > (nov_dec <- filter(flights,month %in% c(11,12)))#这个是选择month等于1112的列
  19. # A tibble: 55,403 x 19
  20. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  21. <int> <int> <int> <int> <int> <dbl> <int> <int>
  22. 1 2013 11 1 5 2359 6. 352 345
  23. 2 2013 11 1 35 2250 105. 123 2356
  24. 3 2013 11 1 455 500 -5. 641 651
  25. 4 2013 11 1 539 545 -6. 856 827
  26. 5 2013 11 1 542 545 -3. 831 855
  27. 6 2013 11 1 549 600 -11. 912 923
  28. 7 2013 11 1 550 600 -10. 705 659
  29. 8 2013 11 1 554 600 -6. 659 701
  30. 9 2013 11 1 554 600 -6. 826 827
  31. 10 2013 11 1 554 600 -6. 749 751
  32. # ... with 55,393 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
  33. # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
  34. # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
  35. > filter(flights,arr_delay <= 120,dep_delay <= 120)#这个可以选择arr_delay小于等于120dep_delay小于等于120的列
  36. # A tibble: 316,050 x 19
  37. year month day dep_time sched_dep_time dep_delay arr_time sched_arr_time
  38. <int> <int> <int> <int> <int> <dbl> <int> <int>
  39. 1 2013 1 1 517 515 2. 830 819
  40. 2 2013 1 1 533 529 4. 850 830
  41. 3 2013 1 1 542 540 2. 923 850
  42. 4 2013 1 1 544 545 -1. 1004 1022
  43. 5 2013 1 1 554 600 -6. 812 837
  44. 6 2013 1 1 554 558 -4. 740 728
  45. 7 2013 1 1 555 600 -5. 913 854
  46. 8 2013 1 1 557 600 -3. 709 723
  47. 9 2013 1 1 557 600 -3. 838 846
  48. 10 2013 1 1 558 600 -2. 753 745
  49. # ... with 316,040 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
  50. # flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
  51. # distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>

  那么遇到了缺失值怎么办,怎么办,怎么办,,,,,,,

我来告诉你,那就是filter()会忽略所有缺失值,你可以看下面这个例子,仔细琢磨一下你就可以发现这个奥秘

  1. > (df <- tibble(x = c(1,NA,3)))#不要惊慌,这个也就相当于构成一个data.frame()数据集,哎呀,差不多。不要怕
  2. # A tibble: 3 x 1
  3. x
  4. <dbl>
  5. 1 1.
  6. 2 NA
  7. 3 3.
  8.  
  9. > filter(df,x > 1)
  10. # A tibble: 1 x 1
  11. x
  12. <dbl>
  13. 1 3.
  14.  
  15. > filter(df,is.na(x) | x > 1)#看我,看这里,有没有发现加上一个is.na(x)就出现缺失值了。厉害吧
  16. # A tibble: 2 x 1
  17. x
  18. <dbl>
  19. 1 NA
  20. 2 3.

  

今天就先写这么多了,我女朋友找我了,溜了

用R的dplyr进行数据转换(一)的更多相关文章

  1. R语言dplyr包初探

    昨天学了一下R语言dplyr包,处理数据框还是很好用的.记录一下免得我忘记了... 先写一篇入门的,以后有空再写一篇详细的用法. #dplyr learning library(dplyr) #fil ...

  2. [R]在dplyr函数的基础上编写函数-(3)tidyeval

    dplyr的优点很明显,数据框操作简洁,如filter(df, x == 1, y == 2, z == 3)等于df[df$x == 1 & df$y ==2 & df$z == 3 ...

  3. [R]在dplyr基础上编写函数-(2)substitute和quote

    关于这两个函数,官方是这么定义的: substitute returns the parse tree for the (unevaluated) expression expr, substitut ...

  4. R中将list类型数据转换成data.frame型

    例如将如下数据转换成data.frame型: l <- replicate( 5, list(sample(letters, 4)), simplify = FALSE ) => 用unl ...

  5. R Tidyverse dplyr包学习笔记2

    Tidyverse 学习笔记 1.gapminder 我理解的gapminder应该是一个内置的数据集 加载之后使用 > # Load the gapminder package > li ...

  6. R之dplyr::select/mutate函数扩展

    select函数 dplyr包select函数用的很多,不过我们一般也是通过正反选列名或数字来选择列. 常见用法如: select(iris,c(1,3)) select(iris,1,3) #同上 ...

  7. [R]在dplyr基础上编写函数-(1)eval

    tidyverse系列的R包虽然解放了大家的双手,但同时也束缚了我们重新编写函数的能力.在这一套语法中,要实现作为函数参数的字符串和变量之间的相互转换困难重重,但只要掌握了其中原理后,也就能够游刃有余 ...

  8. R数据科学-1

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

  9. 【计理05组01号】R 语言基础入门

    R 语言基本数据结构 首先让我们先进入 R 环境下: sudo R 赋值 R 中可以用 = 或者 <- 来进行赋值 ,<- 的快捷键是 alt + - . > a <- c(2 ...

随机推荐

  1. 吴裕雄--天生自然 PYTHON3开发学习:元组

    tup1 = ('Google', 'Runoob', 1997, 2000) tup2 = (1, 2, 3, 4, 5, 6, 7 ) print ("tup1[0]: ", ...

  2. IOC与AOP的理解

    转自 https://blog.csdn.net/qq_38006047/article/details/80797386 1,理解“控制反转” 控制反转,也叫依赖注入,是面向对象编程中的一种设计理念 ...

  3. QeePHP

    百度百科: https://baike.baidu.com/item/qeephp/8328612?fr=aladdin 官方地址: http://www.qeephp.cn/app/index.ph ...

  4. 实用 | PyCharm常用快捷键整理

    PyCharm是一款非常受欢迎的Python IDE,用Python高效处理web和数据科学,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理 ...

  5. goweb- session和数据存储

    session和数据存储 Web开发中一个很重要的议题就是如何做好用户的整个浏览过程的控制,因为HTTP协议是无状态的,所以用户的每一次请求都是无状态的,我们不知道在整个Web操作过程中哪些连接与该用 ...

  6. Prometheus监控系统之入门篇(一)续

    在上篇Prometheus监控系统之入门篇(一)中我们讲解了Prometheus的基本架构和工作流程, 并从0到1搭建了Prometheus服务,pushgateway以及告警系统. 本篇我们主要介绍 ...

  7. 利用docker安装gitlab

    安装docker 安装 virtualbox 下载 dockertoolbox并安装 官网的服务器一直连不上, 幸亏还有这个 https://get.daocloud.io/toolbox/ 比 ht ...

  8. spark mllib lda 简单示例

    舆情系统每日热词用到了lda主题聚类 原先的版本是python项目,分词应用Jieba,LDA应用Gensim 项目工作良好 有以下几点问题 1 舆情产品基于elasticsearch大数据,es内应 ...

  9. Codeforces1304D Shortest and Longest LIS

    前置扯淡 %%@\(wucstido\),思路是在是巧妙---link Description 给一个长度为\(n\)由 \(<\) 和 \(>\)组成的字符串,表示序列中相邻位置的数的大 ...

  10. Overlapping generations model

    I.6 Overlapping generations 世代被分离开,世代不重复一定满足哈代公式的条件,但是现实情况远没有这么简单(因为会世代重叠,即亲代死去同时一个亲代在不同时间都有可能产生子代,因 ...