把以前在swirl课程学的基础数据清洗操作重新整理一遍,主要包括:

  1. dplyr包中的select、filter、arrange、mutate、group_by、summarize函数,以及%>% 管道操算符(pip operation),“then”的意思。
  2. tidyr包中的gather、seperate、spread函数。
  3. lubridate包中date型变量记录更新等操作。

1、dplyr包(select列选择、filter行选择、arrange排序、mutate新增、group_by分组统计、summarize汇总)

(1)首先读入数据并查看数据基本信息:

1 library(dplyr)
2
3 ### Intro
4 path2csv <- file.path('2014-07-08.csv')
5 df <- read.csv(path2csv, as.is = TRUE)
6 dim(df)
7 head(df)
8 cran <- tbl_df(df)
9 cran

(2)利用几个常用函数进行数据提取,筛选,排序等操作:

 1 ##基本函数
 2 select(cran,ip_id,package,country)  #cran为数据集名称,ip_id,package,country为列名
 3 select(cran,r_arch:country)  #r_arch:country表示从r_arch列取到country列
 4 select(cran,country:r_arch)  #反过来排序
 5 select(cran,-time)  #不取time列
 6 select(cran,-(X:size))  #不取X到size的列
 7
 8 filter(cran,package=="swirl")  #cran为数据集,筛选package为”swirl“的所有行
 9 filter(cran,r_version=="3.1.1",country=="US")  #两个筛选条件
10 filter(cran,r_version<="3.0.2",country=="IN")
11 filter(cran,country=="US"|country=="IN")  #添加正则表达式
12 filter(cran,!is.na(r_version))  #筛选所有r_version非空的行
13
14 arrange(cran2,ip_id)  #按ip_id排升序(默认排序方式)
15 arrange(cran2,desc(ip_id))  #按ip_id排降序
16 arrange(cran2,package,ip_id)  #先按package列排序,再对ip_id排序
17
18 mutate(cran3,size_mb=size/2^20)  #利用已有列新建一列size_mb
19 mutate(cran3,size_mb=size/2^20,size_gb=size_mb/2^10)  #新建俩列
20
21 summarise(cran3,avg_bytes=mean(size))  #汇总,查看整体统计数据

(3)分组统计并排序:

 1 by_package<-group_by(cran,package)  #按package列进行分组统计
 2 summarise(by_package,mean(size))  #计算分组后每组记录的平均size
 3 pack_sum <- summarize(by_package,  #对分组数据by_package进行汇总统计
 4                       count =n(),  #n()统计每组频数
 5                       unique = n_distinct(ip_id),  #统计每组有多少不同的ip_id
 6                       countries = n_distinct(country),
 7                       avg_bytes = mean(size))
 8
 9 quantile(pack_sum$unique, probs = 0.99)  #计算unique的99%分位数
10 top_unique<-filter(pack_sum,unique>465)  #筛选频数大于465的记录
11 top_unique_sorted<-arrange(top_unique,desc(unique))
12 top_countries <- filter(pack_sum, countries > 60)
13 result1 <- arrange(top_countries, desc(countries), avg_bytes)
14 print(result1)

(4)利用嵌套精简(3)的过程:

 1 result2 <-
 2   arrange(
 3     filter(
 4       summarize(  #分组数据用summarize进行汇总
 5         group_by(cran,
 6                  package
 7         ),
 8         count = n(),
 9         unique = n_distinct(ip_id),
10         countries = n_distinct(country),
11         avg_bytes = mean(size)
12       ),
13       countries > 60
14     ),
15     desc(countries),
16     avg_bytes
17   )
18
19 print(result2)

(5)利用%>%符号操作(3)中的过程:

 1 # you read it, you can pronounce the %>% operator as
 2 # the word 'then'.
 3 result3 <-
 4   cran %>%
 5   group_by(package) %>%
 6   summarize(count = n(),
 7             unique = n_distinct(ip_id),
 8             countries = n_distinct(country),
 9             avg_bytes = mean(size)
10   ) %>%
11   filter(countries > 60) %>%
12   arrange(desc(countries), avg_bytes)
13
14 # Print result to console
15 print(result3)

(6)几个函数及管道符号的一起使用:

1 cran %>%
2   select(ip_id, country, package, size) %>%
3   mutate(size_mb = size / 2^20) %>%
4   filter(size_mb <= 0.5) %>%
5   arrange(desc(size_mb)) %>%
6   print

2、tidyr包

(1)gather() 和 seperate():

1 library(tidyr)
2 library(readr)
3 library(dplyr)
4
5 students2 %>%
6   gather( sex_class,count ,-grade ) %>%
7   separate( sex_class, c("sex", "class")) %>%
8   print

下面的gather( students2,sex_class,count ,-grade ) 
#gather Gather columns into key-value pairs;students2为数据集,grade为第一列,不参与gather;剩下的列名及数据作为键值对放入sex_class(key)和count(value)下。

接下来seperate将sex_class列分成俩列。separate :Separate one column into multiple columns.

(2)spread():   # spread:Spread a key-value pair across multiple columns.

1 students3 %>%
2   gather(class, grade, class1:class5, na.rm = TRUE) %>%
3   #name未参与gather,因此照原格式输出
4   spread(test, grade) %>%
5   # spread:Spread a key-value pair across multiple columns.
6   mutate(class=parse_number(class)) %>%
7   # parse_numeric    Extract numeric component of variable.
8   print

(3)行合并以及列合并:

 1 student_info <- students4 %>%
 2   select(id, name, sex) %>%
 3   unique() %>%  #去除重复记录
 4   print
 5
 6 gradebook <- students4 %>%
 7   select(id,class,midterm,final) %>%
 8   print
 9
10 merge.data.frame(gradebook,student_info,by="id")
11 #列合并不同行数的数据框
12
13 passed<-mutate(passed,status="passed")
14 failed<-mutate(failed,status="failed")
15 bind_rows(passed,failed)
16 #行合并俩个数据框

(4)几个函数一起使用:

1 sat %>%
2   select(-contains("total")) %>%
3   gather(part_sex, count, -score_range) %>%
4   separate(part_sex, c("part", "sex")) %>%
5   group_by(part,sex) %>%
6   mutate( total = sum(count),  #统计每组频数
7           prop = count / total) %>%  #统计每组里面各分数段比例
8   print

3、lubradate包

(1)获取当前日期时间

1 library(lubridate)

wday(today()) #get the day of the week,such that 1 = Sunday, 2 = Monday

(2)时间数据的录入

1 ymd("1989-05-17")
2 ymd("1989 May 17")
3 mdy("March 12,1975")
4 dmy(25081985)
5 ymd("1920/1/2")
6
7 hms("03:22:14")
8 ymd_hms(c("2010-04-14-04-35-59", "2010-01-01 12:00:00"))
9 ymd_hms(now())

(3)更新时间数据,计算时间间隔

转载于:https://www.cnblogs.com/lhjc/p/11295323.html

数据清洗整理基本操作(R:dplyr、tidyr、lubridate)相关推荐

  1. 【数据分析】Python :知乎数据清洗整理和结论研究

    [博客地址]:https://blog.csdn.net/sunyaowu315 [博客大纲地址]:https://blog.csdn.net/sunyaowu315/article/details/ ...

  2. R语言使用lubridate包的tz函数设置和查询日期、时间对象的时区信息( time zone)

    R语言使用lubridate包的tz函数设置和查询日期.时间对象的时区信息( time zone) 目录

  3. R语言tidyr包pivot_longer函数、pivot_wider函数数据表变换实战(长表到宽表、宽表到长表)

    R语言tidyr包pivot_longer函数.pivot_wider函数数据表变换实战(长表到宽表.宽表到长表) 目录

  4. R语言tidyr包gather()函数实战详解:数据收缩、从宽表到窄表

    R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 目录 R语言tidyr包gather()函数实战详解:数据收缩.从宽表到窄表 收缩两列数据

  5. R语言tidyr包spread()函数实战详解:数据裂变、从窄表到宽表

    R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表 目录 R语言tidyr包spread()函数实战详解:数据裂变.从窄表到宽表

  6. R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

    R语言tidyr包Unite()函数实战详解:多个数据列合并为一列 目录 R语言tidyr包Unite()函数实战详解:多个数据列合并为一列

  7. R语言tidyr包separate()函数实战详解:一列裂变为多列

    R语言tidyr包separate()函数实战详解:一列裂变为多列 目录 R语言tidyr包separate()函数实战详解:一列裂变为多列 一列裂变为两列

  8. 【数据分析】Python :视频网站数据清洗整理和结论研究

    视频网站数据清洗整理和结论研究 要求: 1.数据清洗 - 去除空值 要求:创建函数 提示:fillna方法填充缺失数据,注意inplace参数 2.数据清洗 - 时间标签转化 要求: ① 将时间字段改 ...

  9. r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)

    数据整理和清洗是任何统计分析的前提,也是最为困难的一个环节,很多软件也提供了数据整理和清洗的功能.甚至连我们常用的EXCEL也可以做这个工作,但是效率很低,而且容易出错,且无法完整保存清洗过程.R语言 ...

  10. 部分算法与对应代码整理(R、Python)

    目录 1. 图像.人脸.OCR.语音相关算法整理 2. 机器学习与深度学习相关的R与Python库 (1)R General-Purpose Machine Learning Data Manipul ...

最新文章

  1. 一文尽揽2018 Google I/O:谷歌让你感受到AI科技的魅力
  2. 常量指针与指向常量的指针
  3. 容器开启数据服务之旅系列(一):Kubernetes如何解自建PostgreSQL运维之痛
  4. [LeetCode] 565. Array Nesting
  5. luogu P3786 萃香抱西瓜
  6. IIS 5.0 和 6.0 的 ASP.NET 应用程序生命周期概述
  7. gedit搭建c开发环境
  8. 精馏塔matlab,MATLAB图解精馏塔理论塔板数程序代码
  9. 美团外卖Android Lint代码检查实践
  10. 阿里云应用配置管理ACM发布,重新定义云上配置的存放方式
  11. 编写带对话框界面的OCX
  12. ORACLE数据库维护
  13. 办公室海王小姐姐悄悄问我如何在PC端登录多个微信小号?
  14. java static 区别_Java中static和final的区别
  15. Android之基于message的进程间通信Messenger
  16. c语言memset函数作用,详解C语言中的memset()函数
  17. java中average方法_Java中的IntStream average()方法
  18. 【C++】 bin文件转换成txt文件
  19. matlab输出箱线图的五个特征值_Matlab绘制箱线图
  20. 红皮书数据库的学习总结

热门文章

  1. 我用一根网线,控制了整栋楼的网络
  2. 我为什么放弃java学习Kotlin?
  3. 山东养殖业稳中有升,饲料企业较乐观
  4. 微软输入法和搜狗输入法中的双拼
  5. android lcd工作原理,Android display架构分析(二)
  6. 【渝粤题库】陕西师范大学204001英语写作 作业(高起本、专升本)
  7. PCL安装与配置(Windows10+VS2017+pcl1.8.1 )
  8. 2021 ICPC Asia EC网络预选赛I、II
  9. 更新禅道踩坑问题及禅道更新步骤
  10. [分享]SQl语句学习专题