R包--dplyr为例
安装与加载
- 镜像设置
Tools>Global options>Pakages>CRAN
options()$repos
检查镜像网站
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/")
- 安装
install.packages(“dplyr”)
/BiocManager::install(“dplyr”)
出现问题:重新设置镜像;不存在叫‘pillar’这个名字的程辑包:下载pillar - 加载
library(包)
require(包)
- 示例数据
test <- iris[c(1:2,51:52,101:102),]
dplyr五个基础函数
- mutate(),新增列
mutate(test, new = Sepal.Length * Sepal.Width)
- select(),按列筛选
(1) 按列号
select(test,1)
select(test,c(1,5))
select(test,Sepal.Length)
(2) 按列名
select(test, Petal.Length, Petal.Width)
vars <- c("Petal.Length", "Petal.Width")
select(test, one_of(vars))
- filter(),筛选行
filter(test, Species == "setosa")
filter(test, Species == "setosa"&Sepal.Length > 5 )
filter(test, Species %in% c("setosa","versicolor"))
- arrange(),按某1列或几列对表格排序
(1) 默认从小到大排序
arrange(test, Sepal.Length)
(2) 用desc从大到小
arrange(test, desc(Sepal.Length))
- summarise(),汇总
结合group_by更好
(1) 计算Sepal.Length的平均值和标准差
summarise(test, mean(Sepal.Length), sd(Sepal.Length))
(2) 先按Species分组,再进行计算上述
group_by(test, Species)
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))
dplyr实用技能
- 管道操作 %>% (cmd/ctr + shift + M)
tidyverse包的加载
test %>%
group_by(Species) %>%
summarise(mean(Sepal.Length), sd(Sepal.Length))
- count统计某列unique值
count(test,Species)
dplyr处理关系数据
连接两个表,不要引入factor
options(stringsAsFactors = F)
test1 <- data.frame(x = c('b','e','f','x'), z = c("A","B","C",'D'),stringsAsFactors = F)
test2 <- data.frame(x = c('a','b','c','d','e','f'), y = c(1,2,3,4,5,6),stringsAsFactors = F)
- 內连inner_join--取交集
inner_join(test1, test2, by = "x")
- 左连left_join
left_join(test1, test2, by = 'x')
left_join(test2, test1, by = 'x')
- 全连full_join
full_join( test1, test2, by = 'x')
- 半连接
返回与y表匹配的x表的记录
semi_join(x = test1, y = test2, by = 'x')
- 反连接
返回无法与y表匹配的x表的记录
anti_join(x = test2, y = test1, by = 'x')
- 简单合并
bind_rows() --列数相同
bind_cols() --行数相同
test1 <- data.frame(x = c(1,2,3,4), y = c(10,20,30,40))
test2 <- data.frame(x = c(5,6), y = c(50,60))
test3 <- data.frame(z = c(100,200,300,400))
bind_rows(test1, test2)
bind_cols(test1, test3)