Day6——R包

2023-12-03 00:31:01 浏览数 (1)

思维导图

思维导图思维导图

安装和加载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包即可用管道符号

#%>% (向右操作符,forward-pipe operator),就是把左侧准备的数据或表达式,传递给右侧的函数调用或表达式进行运行,可以连续操作就像一个链条一样。 关系图关系图https://zhuanlan.zhihu.com/p/339107871

代码语言:txt复制
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表的所记录

简单合并

bind_rows()函数需要两个表格列数相同, 而bind_cols()函数则需要两个数据框有相同的行数 示例数据:

代码语言:txt复制
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

0 人点赞