目录

去除重复项

选取随机样本

变量重命名

select()函数

filter()函数

summarise()函数

arrange()函数

group_by() 函数

mutate()函数

join()函数


R软件包dplyr用于数据清理,处理,可视化和分析,包含了很多有用的功能,与ggplot2,reshape2并列为数据分析及可视化的三大包之一。

select()
filter()
mutate()
group_by()
summarise()
arrange()
join()

示例数据

require(dplyr)# Data file
file <- "https://archive.ics.uci.edu/ml/machine-learning-databases/adult/adult.data"# Some sensible variable names
df_names <- c("age", "wrkclass", "fnlweight", "education_lvl", "edu_score","marital_status", "occupation", "relationship", "ethnic", "gender","cap_gain", "cap_loss", "hrs_wk", "nationality", "income")# Import the data
df <- read.csv(file, header = F,sep = ",",na.strings = c(" ?", " ", ""),row.names = NULL,col.names = df_names)

dplyr中的许多数据操作任务都可以在前向管道运算符(%>%)的帮助下执行。 该管道最初是在Magrittr软件包中引入的,此后已包含在dplyr软件包中。 对于流体数据的操作,它是一个非常有用的工具,可产生高度可读的代码。普查数据集需要一些预处理才能准备好用于分类算法。 这篇文章不涉及预处理,也不包括预测建模。

去除重复项

#去除重复行
df %>% distinct() %>% nrow()# 删除重复的行并分配给新的dataframe对象
df_clean <- df %>% distinct()# 根据一个或多个变量删除重复项
df %>% distinct(gender, .keep_all = T)
df %>% distinct(gender, education_lvl, .keep_all =  T)

选取随机样本

# 抽样随机行,替换或不替换
sample_n(df, size = nrow(df) * 0.7, replace = F)
sample_n(df, size = 20, replace = T)# 抽样一定比例的行,有无替换
sample_frac(df, size = 0.7, replace = F)
sample_frac(df, size = 0.8, replace = T

变量重命名

# Rename one or more variables in a dataframe
df <- df %>%rename("INCOME" = "income")df <- df %>%rename("INCOME" = "income", "AGE" = "age")

select()函数

# 选择特定的列(INCOME是先前的新名称)
df %>%select(education_lvl, INCOME)# 在dplyr 0.7.0中,pull()函数将变量提取为向量
df %>%pull(age)# 使用-运算符删除列(可通过名称或列位置引用变量)
df %>%select(-edu_score)df %>%select(-1, -4)df %>%select(-c(2:6))

有些功能可与select函数结合,下面为一些示例

# 选择名称以“ e”开头的列
df %>%select(starts_with("e"))# -号也适用
df %>%select(-starts_with("e"))# 选取包含特定名称的列
df %>%select(contains("edu"))# 按照某一列重排序
df %>%select(INCOME, everything())# 选取以某名称结尾的列
df %>%select(ends_with("e"))df %>%select(ends_with("_loss"))

filter()函数

# 过滤行以保留年龄大于30的观察值
df %>%filter(age > 30)# 使用%in%运算符按多个条件过滤(确保字符串匹配)
df %>%filter(relationship %in% c(" Unmarried", " Wife"))# 可以使用OR 运算符 (|)
df %>%filter(relationship == " Husband" | relationship == " Wife")# 适用 AND 运算符
df %>%filter(age > 30 & INCOME == " >50K")# 两者结合
df %>%filter(education_lvl %in% c(" Doctorate", " Masters") & age > 30)# 非
df %>%filter(education_lvl != " Doctorate")# grepl()函数可以与filter()一起使用
df %>%filter(grepl(" Wi", relationship))

summarise()函数

动态汇总数据组甚至管道组,以进行ggplot数据可视化。

# 汇总分组数据
df %>%filter(INCOME == " >50K") %>%summarise(mean_age = mean(age),median_age = median(age),sd_age = sd(age))# 汇总多个变量使用summarise_at()
df %>%filter(INCOME == " >50K") %>%summarise_at(vars(age, hrs_wk),funs(n(), mean, median))#  . 代表所有变量
df %>%summarise_at(vars(age, hrs_wk),funs(n(),missing = sum(is.na(.)),mean = mean(., na.rm = T)))# 使用匿名函数创建新的摘要统计信息
df %>%summarise_at(vars(age),function(x) { sum((x - mean(x)) / sd(x)) })# 使用summarise_if()有条件地进行汇总
df %>%filter(INCOME == " >50K") %>%summarise_if(is.numeric,funs(n(),mean,median))# 选择数值型变量,并使用summarise_all()获取摘要统计信息
ints <- df[sapply(df, is.numeric)]
summarise_all(ints,funs(mean, median, sd, var))

arrange()函数

升序或降序排列(默认升序)

# 按年龄升序
df %>%arrange(age) %>%head(10)# 按年龄降序
df %>%arrange(desc(age)) %>%head(10)

group_by() 函数

#适用于常规数据分析
df %>%group_by(gender) %>%summarise(Mean = mean(age))df %>%group_by(relationship) %>%summarise(total = n())df %>%group_by(relationship) %>%summarise(total = n(),mean_age = mean(age))

mutate()函数

mutate()用于从现有的局部变量或全局对象创建新变量。 也可以在mutate()中指定新变量,例如序列。

# 从已知变量中构建新变量
df %>% mutate(norm_age = (age - mean(age)) / sd(age))# 将每个数字元素乘以1000(将名称“ new”添加到原始变量名称中)
df %>%mutate_if(is.numeric,funs(new = (. * 1000))) %>%head()

join()函数

join()用于合并来自共同ID或其他一些常见变量的不相交表的行。 join有很多变体,通常使用的是 left, right, inner and full joins.

# 构建用于键值的ID
df <- df %>%mutate(ID = seq(1:nrow(df))) %>%select(ID, everything())# 生成两个表(部分重叠)
table_1 <- df[1:50 , ] %>%select(ID, age, education_lvl)table_2 <- df[26:75 , ] %>%select(ID, gender, INCOME)# left join()将表2中的行联接到表1中(方向在参数顺序中是隐式的)
left_join(table_1, table_2, by = "ID")# Right join 将表2中的行联接到表1中
right_join(table_1, table_2, by = "ID")# inner join仅保留完整case
inner_join(table_1, table_2, by = "ID")# Full join 联接并保留所有的case
full_join(table_1, table_2, by = "ID"

以上总结了dplyr的一些出色功能。 有关函数及其参数的更多信息,请使用模板查看帮助文档:

References

Hadley Wickham, Romain Francois, Lionel Henry and Kirill Müller (2017). dplyr: A
Grammar of Data Manipulation. R package version 0.7.0.
https://CRAN.R-project.org/package=dplyr

H. Wickham. ggplot2: Elegant Graphics for Data Analysis. Springer-Verlag New
York, 2009.

dplyr包功能(数据清理、过滤、合并R实现)相关推荐

  1. 独家 | 用于数据清理的顶级R包(附资源)

    作者:Anna Kayfitz,CEO of StrategicDB Corp 翻译:顾宇华 校对:杨光 本文约1700字,建议阅读5分钟. 确保数据干净整洁应该始终是数据科学工作流程中首要也是最重要 ...

  2. R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position)

    R语言dplyr包通过数据列的索引重命名数据列实战(Rename Column by Index Position) 目录 R语言dplyr包通过数据列的索引重命名数据列实战(Rename Colum ...

  3. R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长)、使用bind_cols函数横向合并两个dataframe(列生长)

    R语言dplyr包使用bind_rows函数纵向合并两个dataframe(行生长).使用bind_cols函数横向合并两个dataframe(列生长) 目录

  4. R语言dplyr包对数据进行超前或者之后处理(lead、lag)实战

    R语言dplyr包对数据进行超前或者之后处理(lead.lag)实战 目录 R语言dplyr包对数据进行超前或者之后处理(lead.lag)实战

  5. 【R语言】必学包之dplyr包

    R包dplyr可用于处理R内部或者外部的结构化数据,相较于plyr包,dplyr专注接受dataframe对象, 大幅提高了速度,并且提供了更稳健的数据库接口.同时,dplyr包可用于操作Spark的 ...

  6. R语言 数据处理 dplyr包 数据清理

    dplyr包 这个包是Hadley Wickham创建和维护的.它包括了(几乎)全部可以用来加快数据处理进程的内容.它最有名的是数据探索和数据转换功能.它的链式语法让它使用起来很方便.它包括5个主要的 ...

  7. R语言dplyr包filter函数通过逻辑条件过滤数据实战

    R语言dplyr包filter函数通过逻辑条件过滤数据实战 目录 R语言dplyr包filter函数通过逻辑条件过滤数据实战 #导入dplyr包 #仿真数据

  8. R行数据过滤基于dplyr包filter函数

    R行数据过滤基于dplyr包filter函数 目录 R行数据过滤基于dplyr包filter函数 筛选等于某个值的行 使用与操作筛选行

  9. R语言dplyr包combine()函数实现数据拼接(concatenate)实战

    R语言dplyr包combine()函数实现数据拼接(concatenate)实战 目录 R语言dplyr包combine()函数实现数据拼接(concatenate)实战 # 导入dplyr包 #c ...

最新文章

  1. 生成假人脸、假新闻...AI虚拟世界正形成
  2. 一文详解鱼眼相机的车位线感知
  3. AssertionError: Invalid device id 和RuntimeError: CUDA error: invalid device ordinal
  4. python采用面向对象编程模式吗_在python中,面向对象还有用吗?
  5. python添加时间戳_在python中添加时间戳
  6. 2020蓝桥杯省赛---java---B---8(数字三角形)
  7. Oracle及Oracle客户端、PLSQL安装的一些问题
  8. 1835 魔法猪学院
  9. c程序100例第3题
  10. Redis学习手册(目录)
  11. c语言上机作业题及答案,C语言上机题库及答案
  12. 关于电子书下载源、转换、阅读软件、个人图书馆的建立
  13. Layui 表单设计器
  14. 如何看懂源代码--(分析源代码方法)
  15. 阿里1688产品图片和视频资料下载
  16. TiDB 6.1 单机环境 On openEular 2003 SP3
  17. 【Spring源码】4. 自己搞个标签?~自定义标签保姆级全过程(图解向,堆图预警)
  18. 新手必读;优秀驾驶员开车技巧!!!
  19. python matplotlib绘制 3D图像专题 (三维柱状图、曲面图、散点图、曲线图合集)
  20. win8服务器设置虚拟机,win8系统怎么安装虚拟机 win8系统安装虚拟机的详细图文教程...

热门文章

  1. 电大计算机专业英语形成性考试,《计算机专业英语》形成性考核册答案
  2. Mac电脑的超级右键,帮你新建Excel文件,你学会了吗?
  3. 《〈XNova/OGame〉源码笔记》(1-2)
  4. ACM数论----连分数问题
  5. 小米携手联芯 是为了下多大一盘棋?
  6. golang Linux桌面程序,舍弃Electron,使用HTML5 + Golang创建桌面应用程序
  7. 【JVM】内存溢出问题排查
  8. 【LeetCode】1399. 统计最大组的数目(C++)
  9. vue生命周期钩子函数的正确使用方式
  10. uboot环境变量保存到EMMC