搜索
查看: 339|回复: 0

[R] R for Data Science-015 dplyr的核心函数和辅助函数

[复制链接]

12

主题

14

帖子

79

积分

注册会员

Rank: 2

积分
79
发表于 2018-11-24 19:54:49 | 显示全部楼层 |阅读模式
核心函数:
fliter(): 用于筛选行,返回行的子集。
arrange(): 根据一个或者多个变量对行排序。
select(): 返回列的子集。
mutate():根据已有数据创建新的列。
summarize():对各个群组汇总计算并返回一维结果。

辅助函数:
1. 用于在select()中选择变量:
starts_with("X"): 以 "X"开头的变量名
ends_with("X"):   以 "X"结束的变量名
contains("X"):      包含 "X"的变量名
matches("X"):      匹配正则表达式“x"的变量名
num_range("x", 1:5):  变量名为 x01, x02, x03, x04 and x05
one_of(x):    出现在字符向量x中的所有变量名
在select()中直接使用列时不需要引用"",但使用上述辅助函数时必须引用""。
everything()可用于移动变量,例如:
select(flights, time_hour, air_time, everything())

select()函数变体rename()可用于 重命名变量,例如:
rename(flights, tail_num = tailnum)

2、filter()   
R 有一系列逻辑表达式可用于filter()中:
x < y;x <= y;x == y;x != y;x >= y;x > y;x %in% c(a, b, c)
示例:
filter(df, a > 0, b > 0)
filter(df, !is.na(x))

3、arrange()  
arrange()默认从小到大排序,在arrange()中使用desc()作用于变量可以使之从大到小排序.

4、mutate()  
mutate()允许在同一次调用中使用新变量来创建下一个变量,例如:
mutate(my_df, x = a + b, y = x + c)
mutate()总是将新列加在数据集的最后
如果只想保留新变量,可以使用transmute()函数
查看所有列的简单方法是用view()函数

创建新变量的多种函数可以同mutate()一同使用。这种函数必须是向量化的,接受一个向量作为输入,并返回一个向量作为输出,而且输入向量与输出向量具有同样数目的分量。
1)算数运算符:+ - × / ^
2)模运算符: %/%, %%,可以用于拆分整数
%/%整数除法
%%求余
3)对数函数
log()
log2()
log10()
4)偏移函数
lead()
lag()
分别返回一个序列的领先值和滞后值
5)累加和滚动聚合
累加和 cumsum()
累加积 cumprod()
累加最小值 commin()
累加最大值 commax()
累加均值 cummean()
6)逻辑比较
<, <=, >, >=, !=
7) 排秩
min_rank(): 最小值获得做签名的名次,desc(x)可以让最大的值获得最前面的名次。
row_number():
dense_rank():
percent_rank():
计算给定行的百分比排名。使用以下公式确定百分比排名:
(x - 1) / (the number of rows in the window or partition - 1)
其中,x 为当前行的排名。
返回值范围介于 0 和 1(含 1)之间。任何集合中的第一行的 PERCENT_RANK 均为 0。
cume_dist()
计算某个窗口或分区中某个值的累积分布。假定升序排序,则使用以下公式确定累积分布:count of rows with values <= x / count of rows in the window or partition
其中,x 等于 ORDER BY 子句中指定的列的当前行中的值。返回值范围介于 0 和 1(含 1)之间。

ntile()
x <- 5 1 3 2 2 NA
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/aca1a3d53b5d4721a799ef06b9f052f8/90-822524430.png
1
row_number(x)

C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/bb8f52d581064db8a4ebcfea958d9d13/9-1438895778.png
row_number是对数据大小进行编号排序,遇到重复值,排序继续加1,缺失值不计入
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/7e47de1fed8e4772bcd91765ee725ef8/5-1496106773.png
min_rank是对数据大小进行编号排序,遇到重复值,排序相同,但每个值都占一个位置,缺失值不计入
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/e2b91cdd42714202a5f49fb28080824a/65-844343812.png
dense_rank是对数据大小进行编号排序,遇到重复值,排序相同,所有重复值只占一个位置,缺失值不计入
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/427da87baf154d3da37ac899a43f9a53/4-1333034609.png
percent_rank是对数据进行百分比排序,每个值表示数据所在总体排名中的百分比位置
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/c0d992775b1f4908a6d8baa88862aa5c/8-1133317792.png
cume_dist是把所有点集中反应在0-1之间的一个数值,每个数值表示数据所在位置,跟percent_rank有点类似
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/adf37c9a439b467180744e98589e85a9/34-727785980.png
ntile则可以指定数据排序的个数,然后循环这些排序数据对数据进行排序。

三角函数
sqrt : 开平方函数
abs  : 绝对值函数
exp  : 2.71828…
expm1  : 当x的绝对值比1小很多的时候,它将能更加正确的计算exp(x)-1
log  : 对数函数
log10  : 对数(底为10)函数
log2  : 对数(底为2)函数
sin  : 正弦函数
cos  : 余弦函数
tan  :  正切函数
asin  :  反正弦函数
acos  :  反余弦函数
atan  :  反正切函数
sinh  :  超越正弦函数
cosh  :  超越余弦函数
tanh  :  超越正切函数
asinh  :  反超越正弦函数
acosh  :  反超越余弦函数
atanh  :  反超越正切函数
logb  :  和log函数一样
log1px  :  当x的绝对值比1小很多的时候,它将能更加正确的计算log(1+x)
gamma  :  Γ函数(伽玛函数)
lgamma  :  等同于log(gamma(x))
ceiling  :  返回大于或等于所给数字表达式的最小整数
floor  :  返回小于或等于所 给数字表达式的最大整数
trunc  :  截取整数部分
round  :  四舍五入
signif(x,a)  :  数据截取函数 x:有效位 a:到a位为止

5、 summarise()
R的下列聚合函数(摘要函数)可用于 summarise()中
min(x) - 最小值.
max(x) - 最大值
mean(x) - 平均值
median(x) - 中位数
quantile(x, p) -  x的第P个分位数
sd(x) - 标准差
var(x) - 方差
IQR(x) - 四分位数
diff(range(x)) - x值的范围
dplyr包自身提供了一些有用的聚合函数:
first(x) -  向量x中的第1个元素
last(x) -  向量x中的最后1个元素
nth(x, n) - 向量x中的第n个元素
n() -      data.frame中的行数或  summarise() 描述的观测组的数量
n_distinct(x) - 向量x中唯一值的数量

二、管道函数%>%
dplyr包中特有的管道函数%>%,将上一个函数的输出作为下一个函数的输入。
%>%运算符允许从参数列表中提取函数的第一个参数,并放置在%>%前面。
下面两条指令相等:
mean(c(1, 2, 3, NA), na.rm = TRUE)
c(1, 2, 3, NA) %>% mean(na.rm = TRUE)

三、分组函数group_by()
对数据集定义群组。然后可对各个群组分别进行汇总统计。
通过 group_by() 添加了分组信息后,mutate(), arrange() 和 summarise() 函数会自动对这些 tbl 类数据执行分组操作。
group_by(dataframe,colnames1,colnames2,…)
四、连接数据(joins)
1、6种连接函数如下:
left_join(dataset1,dataset2)
right_join(dataset1,dataset2)
inner_join(dataset1,dataset2,by=c(“”))
full_join(dataset1,dataset2, by = c("first", "last"))
semi_join(dataset1,dataset2, by = c("first", "last"))
anti_join(dataset1,dataset2, by = c("first", "last"))
前4种属于变形连接(mutating joins),后2种属于过滤连接(filtering joins)。
semi-joins基于第二个数据集的信息来过滤第一个数据集的数据。anti-joins找出合并时哪些行不能匹配第二个数据集
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/3252b1e5ae0149ddb666fb20635e40d5/070016_59005.png

2、key值
R语言的 data frames可在 row.names属性中存储重要信息,虽然不是存储数据的好方式却很常见。如果数据集的主关键字在row.names中,将难以与其他数据集连接。一种解决方法是使用tibble包(tibble:a data frame with class tbl_df)中的rownames_to_column()函数,返回该数据集的副本,并且行名作为一列增加到该数据中。
library(tibble)
rownames_to_column(data, var="name")

如果两个数据集有相同的列名,但代表的事物不同,并且by参数不包含这些重复的列名,dplyr会忽略这些列名,并对相同的列名增加.x和 .y来帮助区分列。
当两个数据集中相同的事物有不同的列名,要完成合并,将by设置为一个命名向量。向量的名字为主数据集中的列名,向量的值为第二个数据集中的列名。例如:
x %>% left_join(y, by = c("x.name" = "y.name"))
完成连接后保留主数据集中的列名。

3、多个数据集的连接
Purrr包中的 reduce()函数对多个数据集重复应用某函数,可用于连接多个数据集,与dplyr的join类函数配合使用,例如:
library(purrr)
list(data1,data2,data3) %>% reduce(left_join,by = c("first", "last"))

五、集合操作(set operations)
dplyr提供了intersection、union和setdiff用于获得数据集的交集、并集和差集。
C:/Users/Administrator.SUSTC-609071422/AppData/Local/YNote/data/weixinobU7Vjms0XzJoRDrFc9SD8dTHkpc/a0ce0908a4dd450d8260c04784f5ca9d/070036_21951.png

六、组装数据assembling data
使用如下函数:
bind_rows()
bind_cols() :将多个data frame合成单个data frame
data_frame() : 将一系列列向量组合成data frame
as_data_frame() :将list转换成data frame




上一篇:R for Data Science-014 比较运算符 逻辑运算符 缺失值
下一篇:各位前辈,求助一个perl脚本?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|生信技能树    

GMT+8, 2019-4-24 09:17 , Processed in 0.041255 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.