r语言中mpg数据_R语言数据筛选整理包dplyr
dplyr软件包是R中功能最强大,最受欢迎的软件包之一。该软件包由最受欢迎的R程序员Hadley Wickham编写,他编写了许多有用的R软件包,如ggplot2,tidyr等。本文包括一些示例和如何使用使用dplyr软件包来清理和转换数据。这是一个关于数据操作和数据处理的完整教程。
什么是dplyr?
dplyr是一个强大的R软件包,用于处理,清理和汇总非结构化数据。简而言之,它使得R中的数据探索和数据操作变得简单快捷。
dplyr有什么特别之处?
软件包“dplyr”包含许多主要使用的数据操作功能,例如应用过滤器,选择特定列,排序数据,添加或删除列以及聚合数据。这个包的另一个最重要的优点是学习和使用dplyr函数非常容易。也很容易回想起这些功能。例如,filter()用于过滤行。dplyr函数处理速度比基本R函数快。 这是因为dplyr函数是以计算有效的方式编写的。 它们在语法上也更稳定,并且比向量更好地支持数据帧。以下是该包中的方法与用途:
dplyr
Function
Description
Equivalent SQL
select()
Selecting
columns (variables)
SELECT
filter()
Filter (subset) rows.
WHERE
group_by()
Group the data
GROUP BY
summarise()
Summarise (or aggregate) data
-
arrange()
Sort the data
ORDER BY
join()
Joining data frames (tables)
JOIN
mutate()
Creating New Variables
COLUMN ALIAS
dplyr中主要方法的使用
filter系列:筛选出自己想要的数据
#安装与加载包
#直接使用内置的iris、mtcars数据集来演示
#iris数据集中,筛选Species为“setosa”,并且Sepal.Length大于5的样本
#"&"也可以替换成“,”
>filter(iris, Species == "setosa" & Sepal.Length >= 5.5)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.8 4.0 1.2 0.2 setosa
2 5.7 4.4 1.5 0.4 setosa
3 5.7 3.8 1.7 0.3 setosa
4 5.5 4.2 1.4 0.2 setosa
5 5.5 3.5 1.3 0.2 setosa
filter支持以下几种判断形式:
关系类型:、 >=、==、!=、is.na()、 !is.na()
&、 |、 !、 xor() #针对向量集的操作判断
between()、%in%、 near() #sqrt(2) ^ 2 == 2 返回FALSE,near(sqrt(2) ^ 2, 2)则TRUE
all_vars()、any_vars() #出现于filter_all、filter_at、filter_if中,作为判断条件
filter系列,还有几个变异函数:filter_all、filter_at、filter_if
#筛选任何变量>150的样本
filter_all(mtcars, any_vars(. > 150))
#筛选变量以“d”结尾,并且变量 "%%2" 等于0
filter_at(mtcars, vars(starts_with("d")), any_vars((. %% 2) == 0))
# 筛选变量向下取整 == 原变量数值, 并且这部分变量的数值!= 0 的样本集
filter_if(mtcars, ~ all(floor(.) == .), all_vars(. != 0))
更多用法:
mtcars %>% filter_all(all_vars(.>150)) %>% head() # 筛选所有变量均大于150的行,结果为空
mtcars %>% filter_all(any_vars(.>150)) %>% head() # 筛选存在变量大于150的行,
# 针对变量名称为d开头的所有列,筛选存在变量能整除2的所有行
mtcars %>% filter_at(vars(starts_with("d")), any_vars((.%% 2) == 0))
# 针对变量全为整数的列,筛选所有变量非0的所有行
mtcars %>% filter_if(~all(floor(.) == .), all_vars(.!= 0))
# 支持purrr语法筛选
mtcars %>% filter_at(vars(hp, vs), ~ .%% 2 == 0) # 筛选hp和vs变量都是偶数的所有行
select 函数:仅保留你所需要的列,并支持修改变量名称
用法:select(.data, …)
与之前讲解的filter有所不同,select是筛选变量的,而filter是筛选样本集。
应用场景:假设数据存于宽表中(比如有100个变量的表),而你仅需要其中几个变量。而select的关键在于”…“的判断条件
#mtcars数据集中,筛选mpg、cyl、wt、vs,4个变量数据
#mtcars[,c("mpg","cyl","wt","vs")],可以实现相同的功能
>select(mtcars,c("mpg","cyl","wt","vs"))
mpg cyl wt vs
21.0 6 2.620 0
21.0 6 2.875 0
22.8 4 2.320 1
#Tips:select 同样支持":"与"-"操作
#比如:select(mtcars,c("mpg":"vs"))、表示连续的列选择
#select(mtcars,-"mpg") 删除mpg列
以上给人感觉,不通过select,利用数据框与向量操作,同样可以做到,select 真正强大的地方在于,支持以下几种条件判断:
包含关系:starts_with()、 ends_with()、 one_of()
匹配关系:matches()、contains()、num_range()
#包含关系:在Iris中,筛选以Petal开头,或Width结尾的变量
>select(iris, starts_with("Petal"), ends_with("Width"))
#Petal.Length Petal.Width Sepal.Width
#1.4 0.2 3.5
#1.4 0.2 3.0
#1.3 0.2 3.2
#...(数据省略)
#Tips:starts_with("Petal"), ends_with("Width"),2个条件不是 "且" 的关系,而是 "或"
#包含关系:经常需要提取变化的数据集合,利用one_of再合适不过了
#提取mtcars中,"mpg","cyl","wt","vs" ,"vss"
>var1
>select (mtcars, one_of(var1))
#mpg cyl wt vs
#21.0 6 2.620 0
#21.0 6 2.875 0
#2.8 4 2.320 1
#...(省略数据)
#Warning message: Unknown columns: `vss`
#Tips: select没找到额变量,系统会返回警告
#匹配关系:筛选Iris数据集,变量名中带有"wid"的变量名
>select(iris, matches(".wid."))
>select(iris, contains("wid"))
#Sepal.Width Petal.Width
#3.5 0.2
#3.0 0.2
#num_range能高效匹配变量名称类似x01, x02, x03的
#随机数据框,由X1~X5,y 组成:
df
x3= runif(10), x4= runif(10),
x5= runif(10), y= letters[1:10])
#筛选 y, x1:x3的变量,并且把y重命名为 var1
>select(df, c(var1 = "y", num_range("x", 1:3)))
#var1 x1 x2 x3
#a 0.96631605 0.29815009 0.6545414
#b 0.61046600 0.76547552 0.8247191
#c 0.70510879 0.46636723 0.4472588
#... (数据省略)
mutate系列:对数据进行计算产生新数据
用法:mutate(.data, …)
mutate的使用方式,主要是依靠"…"的公式变化,生成新的变量
mutate支持以下几种公式 :
+、-、*、÷ 、%%、%|% 等常用计算方式
lead()、 lag()
dense_rank(), min_rank(), percent_rank(), row_number(), cume_dist(), ntile()
cumsum(), cummean(), cummin(), cummax(), cumany(), cumall()
na_if(), coalesce()
if_else(), recode(), case_when()
先从"rank"系列开始介绍,这一函数类,主要是用来划分名次、等级、百分比、密度等等
#############简单的+、-、*、÷ 、%%、%|% 可以增加新的数据列
>mutate(mtcars,aa=hp-drat,bb=mpg*cyl)
mpg cyl disp hp drat wt qsec vs am gear carb aa bb
1 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4 106.10 126.0
2 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4 106.10 126.0
3 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1 89.15 91.2
4 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1 106.92 128.4
5 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2 171.85 149.6
6 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1 102.24 108.6
7 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4 241.79 114.4
#######如果只想保留这些新的变量可以:
>transmute(mtcars,aa=hp-drat,bb=mpg*cyl)
aa bb
1 106.10 126.0
2 106.10 126.0
3 89.15 91.2
4 106.92 128.4
5 171.85 149.6
6 102.24 108.6
##########percent_rank,按照[0,1]百分比的形式进行排序
#举例说明,按照x的数值,按照百分比进行划分
x
percent_rank(x)
#[1] 1.00 0.00 0.50 0.25 0.75
#这类函数比较适用于 ,需要排名次的场景。比如考试、比赛...
#比如根据iris中的Sepal.Length,进行百分比表示, 其中 %>% 管道的标识符,select函数中,everything()可以用来更换变量顺序
>iris %>% mutate(Length_rank = percent_rank(Sepal.Length)) %>% select(Length_rank,everything())
#Length_rank Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#0.21476510 5.1 3.5 1.4 0.2 setosa
#0.10738255 4.9 3.0 1.4 0.2 setosa
#...(数据省略)
#row_number(),不仅可以用来对想来排序,也可以表示获取行数
mutate(mtcars, row_number() == 1L) # 新生成的变量,用来判断是否是第一行,返回TRUE 或者 FALSE
mtcars %>% filter(between(row_number(), 1, 10)) # 通过row_number,筛选1-10行.有点类似 top_n(10)
#ntile,切割数据集为N块,返回具体的数值,属于等分切割
ntile(runif(10), 5)
#[1] 1 2 4 5 5 3 4 2 3 1
#某种程度上,ntile可以用来划分训练集和测试集(类似sample函数)
#ind
#mtcars[ind == 1,]
#备注:ntile对数据框使用的时候,如果没有特殊标明具体的数据列,ntile会对所有的列进行切割操作
再说一下"cum"函数系列,这类函数计算累积指标,比如截止到某一天的平均值、总和、乘积等等。
# cumsum,累积相加的数值
cumsum(1:10)
# 1 3 6 10 15 21 28 36 45 55
# 原数据集有N个,返回也是N个
# 类似MS_SQL中的sum(s)over(order by y)
# cumany(), cumall(),则是逻辑判断,并非计算数值
cumall(-5:5)
# TRUE TRUE TRUE TRUE TRUE FALSE FALSE FALSE FALSE FALSE FALSE
# 返回的是逻辑值,0代表FALSE
最后说一下"判断"函数系列,这类函数应用比较广泛。
比如生活中,当天空下雨了,小明就打伞了
类似EXCEL中的 if函数,vlookup函数等等
# if_else
# 用法:if_else(condition, true, false, missing = NULL),比传统的ifelse多了一个missing参数
# 并且if_else能保留原数据的数据类型,不会降维操作
# 假设x >= 0,则 y-1,y
df
df %>% mutate( xy = if_else(x >= 0, y -1, y+1, y))
# x y xy
# -5 0.7760150 1.7760150
# -4 0.9310976 1.9310976
# case_when中,判断的条件可以更加的多样化
# case_when,与SQL中的case...when...一样
# 同C语言中的switch一样
x
case_when(
x %% 2 == 0 ~ "偶",
x %% 2 == 1 ~ "奇",
TRUE ~ as.character(x)
#可以设置一个默认值
)
"奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" "奇" "偶" NA
arrange 用于数据排序
arrange() 函数以行为单位进行排序,默认为升序排列,降序使用 desc( ) 函数。第一个参数为数据集名称,后面为排序依据变量。
> arrange(mtcars,hp,mpg,cyl )
mpg cyl disp hp drat wt qsec vs am gear carb
1 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
2 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
3 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
4 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
5 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
6 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
7 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
8 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
9 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
10 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
多列排序,降序用desc()
> arrange(mtcars,desc(hp),mpg,cyl )
mpg cyl disp hp drat wt qsec vs am gear carb
1 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
2 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
3 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
4 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
5 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
6 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
7 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
8 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
9 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
10 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
sample_n() and sample_frac()按行随机选取数据子集
sample_n() and sample_frac() 分别是按固定多少行随机选取,一个是按行数的比例选取;
> sample_n(mtcars,10)
mpg cyl disp hp drat wt qsec vs am gear carb
1 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
2 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
3 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
4 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
5 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
6 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
7 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
8 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
9 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
10 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
> sample_frac(mtcars,0.1)
mpg cyl disp hp drat wt qsec vs am gear carb
1 10.4 8 472 205 2.93 5.25 17.98 0 0 3 4
2 14.3 8 360 245 3.21 3.57 15.84 0 0 3 4
3 13.3 8 350 245 3.73 3.84 15.41 0 0 3 4
%>% 数据管道综合运用举例
data(iris)
data(mtcars)
iris %>% head()
mtcars %>% head()
# 筛选变量名为字符串开头的变量
iris %>% select(starts_with("Sepal")) %>% head()
# 多个筛选条件
iris %>% select(-starts_with("Sepal")) %>% head()
# 筛选变量名为字符串结尾的变量
iris %>% select(ends_with("Length")) %>% head()
iris %>% select(-ends_with("Length")) %>% head()
# 将变量Species移动到最前面
iris %>% select(Species, everything()) %>% head()
# 反筛选,筛选除了Sepal.Length变量的其它变量
iris %>% select(-Sepal.Length) %>%head()
# 将变量Species移动到最后面
iris %>% select(everything(), Species) %>% head()
iris %>% select(-Species, Species) %>% head()
# 错误的用法,结果为空
iris %>% select(Species, -Species) %>% head()
iris %>% select(contains("etal")) %>% head()
iris %>% select(matches(".t.")) %>% head() # 筛选名称中,t在中间的变量。
iris %>% select(last_col()) %>% head()# 最后一个变量
iris %>% select(last_col(offset = 2)) %>% head() # 倒数第3个变量
iris %>% select(one_of(c("Petal.Length", "Petal.Width"))) %>% head()
iris %>% group_by(Species) %>% select(group_cols()) %>% distinct() %>% head() # 获取分组变量名
df % as_tibble()
head(df)
df %>% select(V4:V7) %>% head() # 筛选V4列到V7列
df %>% select(num_range("V", 4:7)) %>% head() # 结果与前面一样
#列名重命名
iris %>% select(petal_length = Petal.Length) %>% head() # 重命名
iris %>% select(obs = starts_with('S')) %>% head() # 多个变量重命名
更多生物信息课程:
1. 文章越来越难发?是你没发现新思路,基因家族分析发2-4分文章简单快速,学习链接:基因家族分析实操课程、基因家族文献思路解读
2. 转录组数据理解不深入?图表看不懂?点击链接学习深入解读数据结果文件,学习链接:转录组(有参)结果解读;转录组(无参)结果解读
3. 转录组数据深入挖掘技能-WGCNA,提升你的文章档次,学习链接:WGCNA-加权基因共表达网络分析
9.组学大讲堂全部生物生信数据挖掘课程可点击:组学大讲堂视频课程
r语言中mpg数据_R语言数据筛选整理包dplyr相关推荐
- R语言中dim函数_R语言中的方差分析方法汇总
方差分析,是统计中的基础分析方法,也是我们在分析数据时经常使用的方法.下面我总结一下R语言如何对常用的方差分析进行操作. 1. 方差分析的假定 上面这个思维导图,也可以看出,方差分析有三大假定:正态, ...
- R语言中dim函数_R语言--向量化计算(apply族函数)
R语言最优秀的是它的向量化编程,这其中apply族函数扮演了非常重要的角色.apply族函数是由apply.sapply.lapply.mapply.tapply等函数组成的.熟练使用apply族函数 ...
- R语言中dim函数_R语言 常见函数知识点梳理与解析 | 精选分析
目 录 1.str() 显示数据集和变量类型,并简要展示数据集情况 2.subset() 取子集 3.which.min(), which.max()和which() 4.pmin( )/ pmax ...
- r语言中paste函数_R中的paste()函数-简要指南
r语言中paste函数 Using the paste() function in R will be straight and simple. In this tutorial let's see ...
- r语言中mpg数据_R语言常用的数据处理的包(1)
在R中有很多的内置函数,比如transform().rbind().cbind()等函数,这些函数我们可以直接使用,除此之外,还有常见的几种包在处理数据的时候非常好用. dplyr包 dplyr包是H ...
- r语言中mpg数据_R语言数据实战 | 统计检验
原标题:R语言数据实战 | 统计检验 1.单个总体均值的t检验 1. 什么是检验? 检验(test)是统计学中最重要的概念之一,在科学研究和实际业务中都有着广泛的应用.用一句话来概括就是:人们希望通过 ...
- r语言中mpg数据_零基础生信入门第一课——R语言数据清洗,超详细讲解,建议收藏!...
小伙伴们大家好!今天我要用一篇推文精要概括数据清洗中的最基本最关键的步骤,对于零基础的学员一定会有很大收获!数据清洗是完成一篇生信文章最基本但也是最终要的准备工作,如果不会数据清洗,就要错过很多优质数 ...
- r语言 整理、处理数据步骤_R语言万能数据清洗整理包Tidyverse(一)
数据整理和清洗是任何统计分析的前提,也是最为困难的一个环节,很多软件也提供了数据整理和清洗的功能.甚至连我们常用的EXCEL也可以做这个工作,但是效率很低,而且容易出错,且无法完整保存清洗过程.R语言 ...
- r语言中mpg数据_R语言数据分析系列之五
R语言数据分析系列之五 本节来讨论一下R语言的基本图形展示,先来看一张效果图吧. 这是一张用R语言生成的,虚拟的wordcloud云图,详细实现细节请參见我的github项目:https://gith ...
最新文章
- Java培训都学什么
- Android开发之百度地图经纬度转换地址(以及获取详细地址的方法自测成功)
- VS Code 变身约会利器!以码会友,轻松找到心仪的TA!
- java中死锁_关于java中死锁的总结
- python table_用python解析word文件(二):table
- 内存的工作原里(二)
- 家卫士扫地机器人好吗_2020年扫地机器人推荐选购指南(扫地机器人实用吗?国内扫地机器人哪个牌子好?)...
- cte sql_为什么我的CTE这么慢?
- Canvas实现简单刮刮乐效果
- Mysql使用dos命令安装
- R语言source命令使用过程中遇到的某些错误的解决方法
- 2020 IJCAI 接受论文 list 分类排列(二)
- 清华生的多年奋斗领悟
- 介值定理究竟在讲什么?
- 银河麒麟高级服务器部署glusterfs
- Clippper模拟量输出设置
- Jordan CP3 11 Performance Reviews
- 华为云大数据平台,助力企业数字化转型成效明显
- 【记忆化搜索】 hdu2452 Navy maneuvers
- CityEngine2019 学习笔记 (1)一 基本操作
热门文章
- 把数据转换为在内存中Tree(树形结构)。_Linux的中断处理机制 [二] - 数据结构(2)...
- zlib和openssl相关库错误的解决
- python数组每个元素加1_python-根据键转换numpy数组中的每个元素
- python设置背景音乐_python给视频添加背景音乐并改变音量的具体方法
- php 數組重組,php數組的重組及多級下拉菜單
- mysql的count()函数如何选择索引,千万级表的count()查询优化实例
- java并发实战看不懂,附带学习经验
- 【深度学习】像素级分割网络新思路之DeepLabv3+
- 【Network Security!】xrdp+vnc4server+xfce4远程管理Ubuntu服务器桌面
- python【蓝桥杯vip练习题库】ADV-120 	6-17复数四则运算