Day6——R包的学习

2023-10-25 23:17:54 浏览数 (1)

R包:R包R包,R语言函数打的包

大纲大纲

* *************

镜像设置

不优解:

菜单栏-Tools-Packages-Primary CRAN repository-选择国内镜像

PLUS:

代码语言:txt复制
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) #对应清华源
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") #对应中科大源
  • 缺陷:每次都需要重新设置

最优解:

代码语言:txt复制
file.edit('~/.Rprofile')
创建文件后,粘贴PLUS的代码创建文件后,粘贴PLUS的代码

然后,保存该文件并重启

完成后检查一下

代码语言:txt复制
options()$repos
options()$BioC_mirror

安装R包

根据包的来源选择:

代码语言:txt复制
install.packages(“包”)BiocManager::install(“包”)

加载R包

library()和require()# 加不加引号无所谓

综合步骤

代码语言: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的基础函数

以iris为例

mutate(),新增列

mutate(test, new = Sepal.Length * Sepal.Width)

select(),按列筛选

按列号筛选

代码语言:txt复制
select(test,1)# 取第一行、第一列
##     Sepal.Length
## 1            5.1
## 2            4.9
## 51           7.0
## 52           6.4
## 101          6.3
## 102          5.8
select(test,c(1,5))# 取第一到五行、列
##     Sepal.Length    Species
## 1            5.1     setosa
## 2            4.9     setosa
## 51           7.0 versicolor
## 52           6.4 versicolor
## 101          6.3  virginica
## 102          5.8  virginica
select(test,Sepal.Length)#取列名为Sepal.Length的列
##     Sepal.Length
## 1            5.1
## 2            4.9
## 51           7.0
## 52           6.4
## 101          6.3
## 102          5.8

按列名筛选

代码语言:txt复制
select(test, Petal.Length, Petal.Width)#取列名为Petal.Length, Petal.Width的列
##     Petal.Length Petal.Width
## 1            1.4         0.2
## 2            1.4         0.2
## 51           4.7         1.4
## 52           4.5         1.5
## 101          6.0         2.5
## 102          5.1         1.9
vars <- c("Petal.Length", "Petal.Width")#将列名赋值给vars
select(test, one_of(vars))#效果同上
##     Petal.Length Petal.Width
## 1            1.4         0.2
## 2            1.4         0.2
## 51           4.7         1.4
## 52           4.5         1.5
## 101          6.0         2.5
## 102          5.1         1.9

filter()筛选行

代码语言:txt复制
filter(test, Species == "setosa")# 取Species中包含setosa的行
##   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
filter(test, Species == "setosa"&Sepal.Length > 5 )#  取Species中包含setosa且Sepal.Length > 5的行行
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species
## 1          5.1         3.5          1.4         0.2  setosa
filter(test, Species %in% c("setosa","versicolor"))# 取Species 中包含"setosa","versicolor"的行
* %in% 判断前面一个向量内的元素是否在后面一个向量中

##   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
## 3          7.0         3.2          4.7         1.4 versicolor
## 4          6.4         3.2          4.5         1.5 versicolor

arrange(),按某1列或某几列对整个表格进行排序

代码语言:txt复制
arrange(test, Sepal.Length)#默认从小到大排序
##   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1          4.9         3.0          1.4         0.2     setosa
## 2          5.1         3.5          1.4         0.2     setosa
## 3          5.8         2.7          5.1         1.9  virginica
## 4          6.3         3.3          6.0         2.5  virginica
## 5          6.4         3.2          4.5         1.5 versicolor
## 6          7.0         3.2          4.7         1.4 versicolor
arrange(test, desc(Sepal.Length))#用desc从大到小
##   Sepal.Length Sepal.Width Petal.Length Petal.Width    Species
## 1          7.0         3.2          4.7         1.4 versicolor
## 2          6.4         3.2          4.5         1.5 versicolor
## 3          6.3         3.3          6.0         2.5  virginica
## 4          5.8         2.7          5.1         1.9  virginica
## 5          5.1         3.5          1.4         0.2     setosa
## 6          4.9         3.0          1.4         0.2     setosa

summarise():汇总

代码语言:txt复制
summarise(test, mean(Sepal.Length), sd(Sepal.Length))# 计算Sepal.Length的平均值和标准差
##   mean(Sepal.Length) sd(Sepal.Length)
## 1           5.916667        0.8084965
# 先按照Species分组,计算每组Sepal.Length的平均值和标准差
group_by(test, Species)
## # A tibble: 6 x 5
## # Groups:   Species [3]
##   Sepal.Length Sepal.Width Petal.Length Petal.Width Species   
## *        <dbl>       <dbl>        <dbl>       <dbl> <fct>     
## 1          5.1         3.5          1.4         0.2 setosa    
## 2          4.9         3            1.4         0.2 setosa    
## 3          7           3.2          4.7         1.4 versicolor
## 4          6.4         3.2          4.5         1.5 versicolor
## 5          6.3         3.3          6           2.5 virginica 
## 6          5.8         2.7          5.1         1.9 virginica
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))
## # A tibble: 3 x 3
##   Species    `mean(Sepal.Length)` `sd(Sepal.Length)`
##   
## 1 setosa                     5                 0.141
## 2 versicolor                 6.7               0.424
## 3 virginica                  6.05              0.354

管道操作(传递)

将上一步的数据用在后面,后面的代码可以简写

代码语言:txt复制
test %>% 
  group_by(Species) %>% 
  summarise(mean(Sepal.Length), sd(Sepal.Length))
## # A tibble: 3 x 3
##   Species    `mean(Sepal.Length)` `sd(Sepal.Length)`
##   
## 1 setosa                     5                 0.141
## 2 versicolor                 6.7               0.424
## 3 virginica                  6.05              0.354

count统计某列的unique值

  • unique :唯一值,在数据源只出现了一次,而删除重复项是对出现多次的数据只保留一个count(test,Species)# A tibble: 3 x 2Species n1 setosa 22 versicolor 23 virginica 2连接两个表內连inner_joininner_join(test1, test2, by = "x")x z y1 b A 22 e B 53 f C 6左连left_join以左边的数据框中x的数据为主取后者包含的。#同理可得右连接left_join(test1, test2, by = 'x')x z y1 b A 22 e B 53 f C 64 x D NAleft_join(test2, test1, by = 'x')x y z1 a 12 b 2 A3 c 34 d 45 e 5 B6 f 6 C全连full_join把两组数据放在一起full_join( test1, test2, by = 'x')x z y1 b A 22 e B 53 f C 64 x D NA5 a6 c7 d 半连接:返回能够与y表匹配的x表所有记录semi_joinsemi_join(x = test1, y = test2, by = 'x')x z1 b A2 e B3 f C
  • 取交集

反连接:返回无法与y表匹配的x表的所记录anti_join

代码语言:txt复制
anti_join(x = test2, y = test1, by = 'x')
##   x y
## 1 a 1
## 2 c 3
## 3 d 4

简单合并

  • 相当于base包里的cbind()函数和rbind()函数;注意,bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数
代码语言: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 人点赞