生信星球——生信入门DAY6:学习R包

2024-01-23 00:18:35 浏览数 (2)

以dplyr为例

首先设置镜像

代码语言:R复制
options("repos" = c(CRAN="https://mirrors.tuna.tsinghua.edu.cn/CRAN/")) 
options(BioC_mirror="https://mirrors.ustc.edu.cn/bioc/") 

先安装,再装载

代码语言:R复制
install.packages("dplyr")
library(dplyr)

(library() : library(package)将加载名为package的命名空间,并添加到包的搜索列表中。加载前对搜索列表进行检查并更新,如果package不存在则报错,如果之前已加载package,则不会重复加载。如没有参数package即library(),则列出lib.loc指定的库中的所有可用包。library(help=package)将返回package的基本信息。

require() : require(package)将加载名为package的命名空间,并添加到包的搜索列表中,与library(package)一致。加载前对搜索列表进行检查并更新,如果package不存在(不可用),则返回FALSE而不报错,如果存在则返回TRUE。

source() : source使R直接接受来自命名文件、URL或表达式的输入,比如source(“Functions.R”)。从该文件读取和分析输入,直到到达文件的结尾,然后在选定的环境中按顺序解析表达式。

简单来讲,library更像装载,require不会报错,source装载的方式则不太一样。

代码语言:R复制
test <- iris[c(1:2,51:52,101:102),]

数据库赋值给test,iris数据集中的这些列来做一个新的数据库

代码语言:R复制
mutate(test, new = Sepal.Length * Sepal.Width)#1
Sepal.Length Sepal.Width Petal.Length Petal.Width    Species   new
1            5.1         3.5          1.4         0.2     setosa 17.85
2            4.9         3.0          1.4         0.2     setosa 14.70
51           7.0         3.2          4.7         1.4 versicolor 22.40
52           6.4         3.2          4.5         1.5 versicolor 20.48
101          6.3         3.3          6.0         2.5  virginica 20.79
102          5.8         2.7          5.1         1.9  virginica 15.66

用两列数据生成新列,然后可以用select筛选列、filter筛选行

代码语言:R复制
filter(test, Species == "setosa")

filter(test, Species == "setosa"&Sepal.Length > 5 )

filter(test, Species %in% c("setosa","versicolor"))

分别表示:筛选species是setosa的列、species且sepal length大于5的列、species是setosa、versicolor中的某一个的列

代码语言:R复制
arrange(test, Sepal.Length)#默认从小到大排序
arrange(test, desc(Sepal.Length))#用desc从大到小

简单的排序

代码语言:R复制
arrange(test, Sepal.Length)
arrange(test, desc(Sepal.Length))

desc即从大到小排列(默认是从小到大)

代码语言:R复制
summarise(test, mean(Sepal.Length), sd(Sepal.Length))
summarise(group_by(test, Species),mean(Sepal.Length), sd(Sepal.Length))

summarise可以配合group使用,第二行代码即是先将数据按species分组,再计算均值和标准差

同时,对于这样一组简单的数据,用管道操作也可以达成相同的目的,但是更有趣

代码语言:R复制
test %>% 
  group_by(Species) %>% 
  summarise(mean(Sepal.Length), sd(Sepal.Length))

跑出来会发现两个代码得出的数据是一样的,但是管道操作(%>%)在复杂的数据中起到更亮眼的作用

简单的统计命令

代码语言:R复制
count(test,Species)

默认是列,意为统计此列的unique值

将两表相连

代码语言:R复制
inner_join(a, b, by = "x") #ab两表以x列内容相同的数据取交集,合成
left_join(a, b, by = 'x') #左连,以a表的x轴为准,将b表的内容补齐至新表左侧
left_join(b, a, by = 'x') #右连
full_join( test1, test2, by = 'x') #全连(行➕列,不算重复)
semi_join(x = test1, y = test2, by = 'x') #半连接,与y表匹配的x表所有记录(即以y为条件的x)
anti_join(x = test2, y = test1, by = 'x') #反连接
bind_rows()#函数需要两个表格列数相同
bind_cols()#函数则需要两个数据框有相同的行数

0 人点赞