R语言基础学习7

2021-06-23  本文已影响0人  7f0a92cda77c
人见人爱 tidyverse

tidyr
dplyr
stringr
ggplot2


tidyverse

安装好包

options("repos" = c(CRAN="http://mirrors.tuna.tsinghua.edu.cn/CRAN/"))
if(!require(tidyr))install.packages("tidyr",update = F,ask = F)
if(!require(dplyr))install.packages("dplyr",update = F,ask = F)
if(!require(stringr))install.packages('stringr',update = F,ask = F)

1 数据清理 tidyr

1.1 tidyr 根据某一列进行合并gather或者是拆分spread

test <- data.frame(geneid = paste0("gene",1:4),
                 sample1 = c(1,4,7,10),
                 sample2 = c(2,5,0.8,11),
                 sample3 = c(0.3,6,9,12))
data
gather操作
test_gather <- gather(data = test,
                    key = sample_nm,#需要合并到一列的,一般是种类,sample, Species
                    value = exp,#合并的数值
                    - geneid)# " - " exclude y with -y

这里的-代表排除这个变量,不参与到key中

gather
spread操作-上述的逆操作
test_re <- spread(data = test_gather,
                key = sample_nm,
                value = exp)
分散后,exp这一项没有了

1.2 分割和合并

1.2.1 分割 separate
test_seprate <- separate(test,x, c("X1", "X2"),sep = ",")
   X1 X2
1  a  b
2  a  d
3  b  c
1.2.2 合并 unite
unite(test_seprate,"x",X1,X2,sep = "****")
       x
1 a****b
2 a****d
3 b****c
1.3 处理NA
X<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
X[2,2] <- NA
X[4,1] <- NA
# 1.去掉含有NA的行,可以选择只根据某一列来去除

drop_na(X)
drop_na(X,X1)
drop_na(X,X2)

### 2.替换NA

replace_na(X$X2,0)

2 dplyr初步探索

2.1 五个基础函数 mutate() select() filter() arrange() summarise()

2.2 两个实用技能 管道操作 %>%; count统计某列的unique值

2.3 处理关系数据 - 将2个表进行连接

2.1

数据集

library(dplyr)
test <- iris[c(1:2,51:52,101:102),]
rownames(test) =NULL

test
###1.mutate(),新增列
mutate(test, new = Sepal.Length * Sepal.Width)
mutate
#2.select(),按列筛选
####(1)按列号筛选
select(test,1)
select(test,c(1,5))

####(2)按列名筛选
select(test,Sepal.Length)
select(test, Petal.Length, Petal.Width)
vars <- c("Petal.Length", "Petal.Width")
select(test, one_of(vars))
一组来自tidyselect的有用函数
select(test, starts_with("Petal"))#1
select(test, ends_with("Width"))#2
select(test, contains("etal"))#3
select(test, matches(".t."))#4
select(test, everything())#5
select(test, last_col())#6
select(test, last_col(offset = 1))#7 ##offset---Set it to n to select the nth var from the end.
1
2
3
4
5
6
7
test
###3.filter()筛选行
filter(test, Species == "setosa")
filter(test, Species == "setosa"&Sepal.Length > 5 )
filter(test, Species %in% c("setosa","versicolor"))
运行结果
#4.arrange(),按某一列对整个表格进行排序

arrange(test, Sepal.Length)#默认从小到大排序
arrange(test, desc(Sepal.Length))#用desc从大到小
arrange(test,  desc(Sepal.Width),Sepal.Length)#先是从大到小排的基础上,再按照Length从小到大排列;两个条件
运行结果
#5.summarise():汇总

summarise(test, mean(Sepal.Length), sd(Sepal.Length))# 计算Sepal.Length的平均值和标准差

#对数据进行汇总操作,结合group_by使用实用性强

运行结果

2.2 两个实用技能 管道操作 %>%; count统计某列的unique值

#1:管道操作 %>% (cmd/ctr + shift + M)

library(dplyr)
x1 = filter(iris,Sepal.Width>3)
x2 = select(x1,c("Sepal.Length","Sepal.Width" ))
x3 = arrange(x2,Sepal.Length)

这些可以直接使用管道符传送
iris %>% 
  filter(Sepal.Width>3) %>% 
  select(c("Sepal.Length","Sepal.Width" ))%>%
  arrange(Sepal.Length)
#2:count统计某列的unique值

count(test,Species)
     Species n
1     setosa 2
2 versicolor 2
3  virginica 2

2.3 处理关系数据 - 将2个表进行连接

merge(test1,test2,by="name")#按照列名-name 那一列进行连接的
merge(test1,test3,by.x = "name",by.y = "NAME")
运行结果
#1.內连inner_join,取交集
inner_join(test1, test2, by = "name")
inner_join(test1,test3,by = c("name"="NAME"))
inner_join
###2.左连left_join
left_join(test1, test2, by = 'name')

left_join(test2, test1, by = 'name')
###3.全连full_join
full_join(test1, test2, by = 'name')

###4.半连接:返回能够与y表匹配的x表所有记录semi_join
semi_join(x = test1, y = test2, by = 'name')

###5.反连接:返回无法与y表匹配的x表的所记录anti_join
anti_join(x = test2, y = test1, by = 'name')
#6.数据的简单合并
#在相当于base包里的cbind()函数和rbind()函数;注意,bind_rows()函数需要两个表格列数相同,而bind_cols()函数则需要两个数据框有相同的行数
各种连接的结果图,合并表格

https://www.rstudio.com/resources/cheatsheets/
参照Jimmy团队的生信入门课程,不涉及任何利益冲突

上一篇下一篇

猜你喜欢

热点阅读