思维导图
安装和加载R包
以dplyr函数为例
代码语言:txt复制options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
install.packages("dplyr")
library(dplyr)
dplyr五个基础函数
示例数据:
代码语言:txt复制test <- iris[c(1:2,51:52,101:102),]
代码语言:txt复制## Sepal.Length Sepal.Width Petal.Length Petal.Width Species
##1 5.1 3.5 1.4 0.2 setosa
##2 4.9 3.0 1.4 0.2 setosa
##51 7.0 3.2 4.7 1.4 versicolor
##52 6.4 3.2 4.5 1.5 versicolor
##101 6.3 3.3 6.0 2.5 virginica
##102 5.8 2.7 5.1 1.9 virginica
数据解释: 鸢尾花(iris)是数据挖掘常用到的一个数据集,包含150种鸢尾花的信息,每50种取自三个鸢尾花种之一(setosa,versicolour或virginica)。每个花的特征用下面的5种属性描述萼片长度(Sepal.Length)、萼片宽度(Sepal.Width)、花瓣长度(Petal.Length)、花瓣宽度(Petal.Width)、类(Species)。
mutate()#新增列
代码语言:txt复制mutate(test, new = Sepal.Length * Sepal.Width)
#新增一列数据为Sepal.Length与Sepal.Width的积
select()#按列筛选
按列号筛选
代码语言:txt复制select(test,1)#选择第一列
select(test,c(1,5))#选择第1和第5列
按列名筛选
代码语言:txt复制select(test, Petal.Length, Petal.Width)
代码语言:txt复制vars <- c("Petal.Length", "Petal.Width")
select(test, one_of(vars))
#选择字符向量中的列,select中不能直接使用字符向量筛选,需要使用one_of函数 R语言中使用vars参数指定数据框中需要分析的字段索引范围在R语言中,我们经常需要对数据框进行分析和处理。数据框是一种二维的表格结构,其中包含了多个变量(字段)和观测值(行)。在进行数据分析时,有时我们只对数据框中的特定字段感兴趣,而不需要使用所有的字段。这时,我们可以使用vars参数来指定需要分析的字段索引范围,从而提取出感兴趣的字段进行后续操作。 vars参数是dply包中select函数的一个参数,它允许我们通过指定字段的索引范围来选择需要的字段。索引范围可以是一个连续的整数向量,也可以是一个布尔向量。
filter()#筛选行
代码语言:txt复制filter(test, Species == "setosa")
#选择物种名为setosa的行
代码语言:txt复制filter(test, Species == "setosa"&Sepal.Length > 5 )
#选择Species == "setosa"并且Sepal.Length大于5的行
代码语言:txt复制filter(test, Species %in% c("setosa","versicolor"))
#选择物种名为setosa","versicolor的行
#%in%判断前面一个向量内的元素是否在后面一个向量中,返回布尔值。
arrange()#按某1列或某几列对整个表格进行排序
代码语言:txt复制arrange(test, Sepal.Length)#默认从小到大排序
代码语言:txt复制arrange(test, desc(Sepal.Length))#用desc从大到小排序
summarise():#汇总
对数据进行汇总操作,结合group_by使用实用性强
代码语言:txt复制summarise(test, mean(Sepal.Length), sd(Sepal.Length))
# 计算Sepal.Length的平均值和标准差
代码语言:txt复制group_by(test, Species)#先按照Species分组
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))#计算每组Sepal.Length的平均值和标准差
dplyr两个实用技能
管道操作 %>%
加载任意一个tidyverse包即可用管道符号
代码语言:txt复制#%>% (向右操作符,forward-pipe operator),就是把左侧准备的数据或表达式,传递给右侧的函数调用或表达式进行运行,可以连续操作就像一个链条一样。 关系图https://zhuanlan.zhihu.com/p/339107871
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
count统计某列的unique值
计数函数计算数据集中列唯一值的数量
代码语言:txt复制count(test,Species)
## Species n
##1 setosa 2
##2 versicolor 2
##3 virginica 2
dplyr处理关系数据
可参考https://www.jianshu.com/p/1f4c7bfed3d4
內连inner_join
代码语言:txt复制inner_join(test1, test2, by = "x")
#保留同时存在于两个表中的观测
左连left_join
代码语言:txt复制left_join(test1, test2, by = 'x')
#保留 test1 中的所有观测
全连full_join
代码语言:txt复制full_join( test1, test2, by = 'x')
#保留test1和test2 中的所有观测
半连接semi_join
代码语言:txt复制semi_join(x = test1, y = test2, by = 'x')
#返回能够与y表匹配的x表所有记录
反连接anti_join
代码语言:txt复制anti_join(x = test2, y = test1, by = 'x')
#返回无法与y表匹配的x表的所记录
简单合并
代码语言:txt复制bind_rows()函数需要两个表格列数相同, 而bind_cols()函数则需要两个数据框有相同的行数 示例数据:
bind_rows(test1, test2)
代码语言:txt复制bind_cols(test1, test3)
代码语言:txt复制以下示例数据来自生信星球
test1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
test1
## x y
## 1 1 10
## 2 2 20
## 3 3 30
## 4 4 40
test2 <- data.frame(x = c(5,6), y = c(50,60))
test2
## x y
## 1 5 50
## 2 6 60
test3 <- data.frame(z = c(100,200,300,400))
test3
## z
## 1 100
## 2 200
## 3 300
## 4 400
bind_rows(test1, test2)
## x y
## 1 1 10
## 2 2 20
## 3 3 30
## 4 4 40
## 5 5 50
## 6 6 60
bind_cols(test1, test3)
## x y z
## 1 1 10 100
## 2 2 20 200
## 3 3 30 300
## 4 4 40 400