在网上找了很久关于数据转换的,都没有找到比较好的。现在为大家整理一下。按照我自己的思路。当然也是为了自己做笔记。
为了方便,大家可以统一安装一个系列的包,这个只需要安装tidyverse这个包就可以,它会安装一系列的数据处理的包,比如ggplot2,dplyr等主力的包。
#安装tidyverse包 install.packages(‘tidyverse‘) #加载这个包 library(tidyverse)
我现在使用的版本如下:
#需要先安装devtools这个包 > devtools::session_info(c(‘tidyverse‘)) Session info ------------------------------------------------------------------------------- setting value version R version 3.4.4 (2018-03-15) system x86_64, mingw32 ui RStudio (1.1.442) language (EN) collate Chinese (Simplified)_China.936 tz Asia/Taipei date 2018-04-11 Packages ----------------------------------------------------------------------------------- package * version date source assertthat 0.2.0 2017-04-11 CRAN (R 3.4.4) backports 1.1.2 2017-12-13 CRAN (R 3.4.3) base64enc 0.1-3 2015-07-28 CRAN (R 3.4.1) BH 1.66.0-1 2018-02-13 CRAN (R 3.4.3) bindr 0.1.1 2018-03-13 CRAN (R 3.4.4) bindrcpp 0.2 2017-06-17 CRAN (R 3.4.4) broom 0.4.3 2017-11-20 CRAN (R 3.4.3) callr 2.0.2 2018-02-11 CRAN (R 3.4.4) cellranger 1.1.0 2016-07-27 CRAN (R 3.4.4) cli 1.0.0 2017-11-05 CRAN (R 3.4.4) colorspace 1.3-2 2016-12-14 CRAN (R 3.4.4) compiler 3.4.4 2018-03-15 local crayon 1.3.4 2017-09-16 CRAN (R 3.4.4) curl 3.1 2017-12-12 CRAN (R 3.4.3) DBI 0.8 2018-03-02 CRAN (R 3.4.4) dbplyr 1.2.1 2018-02-19 CRAN (R 3.4.4) debugme 1.1.0 2017-10-22 CRAN (R 3.4.4) dichromat 2.0-0 2013-01-24 CRAN (R 3.4.1) digest 0.6.15 2018-01-28 CRAN (R 3.4.3) dplyr 0.7.4 2017-09-28 CRAN (R 3.4.3) evaluate 0.10.1 2017-06-24 CRAN (R 3.4.4) forcats 0.3.0 2018-02-19 CRAN (R 3.4.4) foreign 0.8-69 2017-06-22 CRAN (R 3.4.4) ggplot2 2.2.1 2016-12-30 CRAN (R 3.4.4) glue 1.2.0 2017-10-29 CRAN (R 3.4.4) graphics * 3.4.4 2018-03-15 local grDevices * 3.4.4 2018-03-15 local grid 3.4.4 2018-03-15 local gtable 0.2.0 2016-02-26 CRAN (R 3.4.4) haven 1.1.1 2018-01-18 CRAN (R 3.4.4) highr 0.6 2016-05-09 CRAN (R 3.4.4) hms 0.4.2 2018-03-10 CRAN (R 3.4.4) htmltools 0.3.6 2017-04-28 CRAN (R 3.4.4) httr 1.3.1 2017-08-20 CRAN (R 3.4.4) jsonlite 1.5 2017-06-01 CRAN (R 3.4.4) knitr 1.20 2018-02-20 CRAN (R 3.4.4) labeling 0.3 2014-08-23 CRAN (R 3.4.1) lattice 0.20-35 2017-03-25 CRAN (R 3.4.4) lazyeval 0.2.1 2017-10-29 CRAN (R 3.4.4) lubridate 1.7.2 2018-02-06 CRAN (R 3.4.3) magrittr 1.5 2014-11-22 CRAN (R 3.4.4) markdown 0.8 2017-04-20 CRAN (R 3.4.4) MASS 7.3-49 2018-02-23 CRAN (R 3.4.4) methods * 3.4.4 2018-03-15 local mime 0.5 2016-07-07 CRAN (R 3.4.1) mnormt 1.5-5 2016-10-15 CRAN (R 3.4.1) modelr 0.1.1 2017-07-24 CRAN (R 3.4.4) munsell 0.4.3 2016-02-13 CRAN (R 3.4.4) nlme 3.1-131.1 2018-02-16 CRAN (R 3.4.4) openssl 1.0.1 2018-03-03 CRAN (R 3.4.4) parallel 3.4.4 2018-03-15 local pillar 1.2.1 2018-02-27 CRAN (R 3.4.4) pkgconfig 2.0.1 2017-03-21 CRAN (R 3.4.4) plogr 0.2.0 2018-03-25 CRAN (R 3.4.4) plyr 1.8.4 2016-06-08 CRAN (R 3.4.4) praise 1.0.0 2015-08-11 CRAN (R 3.4.4) psych 1.7.8 2017-09-09 CRAN (R 3.4.4) purrr 0.2.4 2017-10-18 CRAN (R 3.4.4) R6 2.2.2 2017-06-17 CRAN (R 3.4.4) RColorBrewer 1.1-2 2014-12-07 CRAN (R 3.4.1) Rcpp 0.12.16 2018-03-13 CRAN (R 3.4.4) readr 1.1.1 2017-05-16 CRAN (R 3.4.4) readxl 1.0.0 2017-04-18 CRAN (R 3.4.4) rematch 1.0.1 2016-04-21 CRAN (R 3.4.4) reprex 0.1.2 2018-01-26 CRAN (R 3.4.4) reshape2 1.4.3 2017-12-11 CRAN (R 3.4.4) rlang 0.2.0 2018-02-20 CRAN (R 3.4.4) rmarkdown 1.9 2018-03-01 CRAN (R 3.4.4) rprojroot 1.3-2 2018-01-03 CRAN (R 3.4.4) rstudioapi 0.7 2017-09-07 CRAN (R 3.4.4) rvest 0.3.2 2016-06-17 CRAN (R 3.4.4) scales 0.5.0 2017-08-24 CRAN (R 3.4.4) selectr 0.3-2 2018-03-05 CRAN (R 3.4.4) stats * 3.4.4 2018-03-15 local stringi 1.1.7 2018-03-12 CRAN (R 3.4.4) stringr 1.3.0 2018-02-19 CRAN (R 3.4.4) testthat 2.0.0 2017-12-13 CRAN (R 3.4.4) tibble 1.4.2 2018-01-22 CRAN (R 3.4.4) tidyr 0.8.0 2018-01-29 CRAN (R 3.4.4) tidyselect 0.2.4 2018-02-26 CRAN (R 3.4.4) tidyverse 1.2.1 2017-11-14 CRAN (R 3.4.4) tools 3.4.4 2018-03-15 local utf8 1.1.3 2018-01-03 CRAN (R 3.4.4) utils * 3.4.4 2018-03-15 local viridisLite 0.3.0 2018-02-01 CRAN (R 3.4.4) whisker 0.3-2 2013-04-28 CRAN (R 3.4.4) withr 2.1.2 2018-03-15 CRAN (R 3.4.4) xml2 1.2.0 2018-01-24 CRAN (R 3.4.4) yaml 2.1.18 2018-03-08 CRAN (R 3.4.4)
我们选取一个航班的数据集,这个数据在下面这个包里面,也需要安装
#安装这个包 install.packages(‘nycflights13‘) #加载这个包 library(nycflights13)
查看这个数据集(这个数据集包含2013年从纽约市出发的所有336778架航班)
> flights
# A tibble: 336,776 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time arr_delay
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>     <dbl>
 1  2013     1     1      517            515        2.      830            819       11.
 2  2013     1     1      533            529        4.      850            830       20.
 3  2013     1     1      542            540        2.      923            850       33.
 4  2013     1     1      544            545       -1.     1004           1022      -18.
 5  2013     1     1      554            600       -6.      812            837      -25.
 6  2013     1     1      554            558       -4.      740            728       12.
 7  2013     1     1      555            600       -5.      913            854       19.
 8  2013     1     1      557            600       -3.      709            723      -14.
 9  2013     1     1      557            600       -3.      838            846       -8.
10  2013     1     1      558            600       -2.      753            745        8.
# ... with 336,766 more rows, and 10 more variables: carrier <chr>, flight <int>,
#   tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>, distance <dbl>, hour <dbl>,
#   minute <dbl>, time_hour <dttm>
这个数据集其实是tibbles格式的,和R的普通的data.frame格式不一样。但是差不多。在这个列名称的下面会有这列的格式,比如int是整形的,dbl是双精度型的,当然啦,R和别的语言不一样,我觉得不要太关注他们的数据格式,大概知道哪些是连续的、哪些是离散的、哪些是字符型的,当然在特殊的情况下,需要考虑,我们现在就暂时不考虑。
好了好了,这些准备的东西就介绍到这吧。进入正题:
dplyr有几个主要的函数。如下:
filter()——这个是按照他的值进行筛选
arrange()——这个就是排序呀!
select()——这个是通过变量名选择变量
mutate()——这个是用现有的变量函数创建新变量
summarize()——这个是将许多值折叠为单个摘要(通常和group_by()函数在一起用,别说是我说的,我就是先透漏一下)
filter()函数
> filter(flights,month == 1,day == 1)
# A tibble: 842 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013     1     1      517            515        2.      830            819
 2  2013     1     1      533            529        4.      850            830
 3  2013     1     1      542            540        2.      923            850
 4  2013     1     1      544            545       -1.     1004           1022
 5  2013     1     1      554            600       -6.      812            837
 6  2013     1     1      554            558       -4.      740            728
 7  2013     1     1      555            600       -5.      913            854
 8  2013     1     1      557            600       -3.      709            723
 9  2013     1     1      557            600       -3.      838            846
10  2013     1     1      558            600       -2.      753            745
# ... with 832 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
上面这个意思很明显,就是选择在这数据集中,month等于1且day等于1的行。看吧,很简单吧,这个是生成一个新的数据,不对原来的数据框进行修改。
例如:
> (dec25 <- filter(flights,month == 1,day == 25))
# A tibble: 922 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013     1    25       15           1815      360.      208           1958
 2  2013     1    25       17           2249       88.      119           2357
 3  2013     1    25       26           1850      336.      225           2055
 4  2013     1    25      123           2000      323.      229           2101
 5  2013     1    25      123           2029      294.      215           2140
 6  2013     1    25      456            500       -4.      632            648
 7  2013     1    25      519            525       -6.      804            820
 8  2013     1    25      527            530       -3.      820            829
 9  2013     1    25      535            540       -5.      826            850
10  2013     1    25      539            540       -1.     1006           1017
# ... with 912 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
当然,也可以用一些逻辑符号,只要你逻辑清楚,都可以用,你只要保证你的数据集在filte()函数的最前面的位置,后面尽管添加约束条件。比如你可以这样做:
> filter(flights,month == 11 | month == 12)#这个是选择month等于11和等于12的列
# A tibble: 55,403 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013    11     1        5           2359        6.      352            345
 2  2013    11     1       35           2250      105.      123           2356
 3  2013    11     1      455            500       -5.      641            651
 4  2013    11     1      539            545       -6.      856            827
 5  2013    11     1      542            545       -3.      831            855
 6  2013    11     1      549            600      -11.      912            923
 7  2013    11     1      550            600      -10.      705            659
 8  2013    11     1      554            600       -6.      659            701
 9  2013    11     1      554            600       -6.      826            827
10  2013    11     1      554            600       -6.      749            751
# ... with 55,393 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
> (nov_dec <- filter(flights,month %in% c(11,12)))#这个是选择month等于11和12的列
# A tibble: 55,403 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013    11     1        5           2359        6.      352            345
 2  2013    11     1       35           2250      105.      123           2356
 3  2013    11     1      455            500       -5.      641            651
 4  2013    11     1      539            545       -6.      856            827
 5  2013    11     1      542            545       -3.      831            855
 6  2013    11     1      549            600      -11.      912            923
 7  2013    11     1      550            600      -10.      705            659
 8  2013    11     1      554            600       -6.      659            701
 9  2013    11     1      554            600       -6.      826            827
10  2013    11     1      554            600       -6.      749            751
# ... with 55,393 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
> filter(flights,arr_delay <= 120,dep_delay <= 120)#这个可以选择arr_delay小于等于120且dep_delay小于等于120的列
# A tibble: 316,050 x 19
    year month   day dep_time sched_dep_time dep_delay arr_time sched_arr_time
   <int> <int> <int>    <int>          <int>     <dbl>    <int>          <int>
 1  2013     1     1      517            515        2.      830            819
 2  2013     1     1      533            529        4.      850            830
 3  2013     1     1      542            540        2.      923            850
 4  2013     1     1      544            545       -1.     1004           1022
 5  2013     1     1      554            600       -6.      812            837
 6  2013     1     1      554            558       -4.      740            728
 7  2013     1     1      555            600       -5.      913            854
 8  2013     1     1      557            600       -3.      709            723
 9  2013     1     1      557            600       -3.      838            846
10  2013     1     1      558            600       -2.      753            745
# ... with 316,040 more rows, and 11 more variables: arr_delay <dbl>, carrier <chr>,
#   flight <int>, tailnum <chr>, origin <chr>, dest <chr>, air_time <dbl>,
#   distance <dbl>, hour <dbl>, minute <dbl>, time_hour <dttm>
那么遇到了缺失值怎么办,怎么办,怎么办,,,,,,,
我来告诉你,那就是filter()会忽略所有缺失值,你可以看下面这个例子,仔细琢磨一下你就可以发现这个奥秘
> (df <- tibble(x = c(1,NA,3)))#不要惊慌,这个也就相当于构成一个data.frame()数据集,哎呀,差不多。不要怕
# A tibble: 3 x 1
      x
  <dbl>
1    1.
2   NA 
3    3.
> filter(df,x > 1)
# A tibble: 1 x 1
      x
  <dbl>
1    3.
> filter(df,is.na(x) | x > 1)#看我,看这里,有没有发现加上一个is.na(x)就出现缺失值了。厉害吧
# A tibble: 2 x 1
      x
  <dbl>
1   NA 
2    3.
今天就先写这么多了,我女朋友找我了,溜了
原文:https://www.cnblogs.com/yuanzhoulvpi/p/8799051.html