首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >生信入门Day3-4

生信入门Day3-4

原创
作者头像
青柠味
发布2025-05-15 16:27:39
发布2025-05-15 16:27:39
3080
举报
复习DAY1-2
复习DAY1-2

引自生信技能树

复习DAY1-2
复习DAY1-2

引自生信技能树

DAY3

三、数据结构——数据框

1、数据框的来源

(1)用代码新建

(2)由已有数据转换或处理得到

(3)读取表格文件

(4)R语言内置数据

注意:向量是一维的,且只存储一种数据类型;

matrix矩阵—二维,只允许一种数据类型;

data.frame数据框—二维,每列只允许一种数据类型;

list列表可装万物。

代码语言:R
复制
#1.数据框来源
# (1)用代码新建
# (2)由已有数据转换或处理得到
# (3)读取表格文件
# (4)R语言内置数据

#2.新建、读取数据框、内置数据
df1 <- data.frame(gene   = paste0("gene",1:4),
                 change  = rep(c("up","down"),each = 2),
                 score   = c(5,3,-2,-4))
df1

df2 <- read.csv("gene.csv")
df2
## 内置数据,R语言或者R包里自带的,无需赋值即可使用(不全是数据框哦)
iris
class(iris)
#顺便了解一下其他数据结构的内置数据
heatmap(volcano)
class(volcano)
class(volcano)
#class既可以判断数据类型,也可以判断数据结构
#array数组,矩阵matrix是一种特殊的数组
letters
LETTERS

2、数据框的属性

代码语言:R
复制
#3.数据框属性
#
dim(df1)
nrow(df1)
ncol(df1)
#
rownames(df1)
colnames(df1)

3、数据框取子集

解决报错的思维:

(1)对比成功的代码、数据与报错的代码、数据间的差别。

(2)读懂error:后面的字

代码语言:R
复制
#4.数据框取子集
df1$gene  #删掉score,按tab键试试
mean(df1$score)
df1$change
#df1要赋值
## 按坐标
df1[2,2]
df1[2,]#取出一行不能成为一个向量,即不能独善其身,所以还赠送了列名。
df1[,2]#取出一列能成为一个向量。
df1[c(1,3),1:2]

## 按名字
df1[,"gene"]
df1[,c('gene','change')]

练习题:3-1

代码语言:R
复制
# 练习3-1
# 1.读取exercise.csv这个文件,赋值给test。
test = __("exercise.csv")
#读取文件名称可以先打引号再按tab键补齐,答案为read.scv
# 2.统计Strand这一列有多少个+,多少个-
__(test$Strand)
#答案为$Strand

4、数据框的修改

代码语言:R
复制
#5.数据框修改

#改一个格
df1[3,3] <- 5
df1
#改一整列
df1$score <- c(12,23,50,2)     
df1
#新增一列
df1$p.value <- c(0.01,0.02,0.07,0.05) 
df1

#改行名和列名
rownames(df1)
#得到的行名是向量而不是数据框,所以对行名的修改也就是对向量的修改。
rownames(df1) <- c("r1","r2","r3","r4")
#只修改某一行/列的名
colnames(df1)[2] <- "CHANGE"
#修改第二列的列名,就是修改【列名这个向量】的第二个元素。

5、两个数据框的连接

代码语言:R
复制
#6.两个数据框的连接
test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'), 
                    blood_type = c("A","B","O","AB"))
test1
colnames(test1)[1]<-"NAME"
test1

test2 <- data.frame(name = c('Damon','jimmy','nicker','tony'),
                    group = c("group1","group1","group2","group2"),
                    vision = c(4.2,4.3,4.9,4.5))
test2

test3 <- data.frame(NAME = c('Damon','jimmy','nicker','tony'),
                    weight = c(140,145,110,138))
test3
merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")
#最好是直接改列名而不是改代码,改列名:colnames(test1)[1]<-"NAME"
#写by=1的话也行,这里的1指的是第一列,那万一这两个列表的第一列不是名字呢?所以最好写列名。
#关于merge的用法还有很多,左连接/右连接/取合集,去找帮助文档。

三、数据结构——矩阵和列表

1、矩阵

代码语言:R
复制
m <- matrix(1:9, nrow = 3)
colnames(m) <- c("a","b","c") #加列名
m

m[2,]
m[,1]
m[2,3]
m[2:3,1:2]
m
class(m[2,])
#numeric还可以细分为两种,把integer当作numeric就可以了。
#数据框提取出一行还是数据框,数据框提取出一列是向量。
#而矩阵提取出一行/列则是向量,至于头顶上的abc则是向量元素的名称。

t(m)#转置,有了abc转置更清楚
as.data.frame(m)
class(m)#转换完了以后去class发现还是矩阵,为什么呢?因为我们没有赋值,所以必须要加上以下这句代码。
m=as.data.frame(m)
class(m)

注意:讲第二遍,R语言里面对一个变量进行修改,都要赋值,没有赋值就等于没有发生过。

2、列表

代码语言:R
复制
#列表
x <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
x
#列表里两个元素的名称,分别是m1和m2。

x[[1]]#两个中括号才能取出列表的子集
x$m1
x[1]

3、补充:元素的名字

代码语言:R
复制
# 补充:元素的名字
#列表的下一级叫元素,像我们刚刚看到的那个矩阵单独取一行(向量),向量里的元素也有名字的,就是那个abc。
scores = c(100,59,73,95,45)
names(scores) = c("jimmy","nicker","Damon","Sophie","tony")
#分数与名字对应着写的。
scores
scores["jimmy"]
scores[c("jimmy","nicker")]
#可以理解为:那五个数字才是向量中的元素的正式名,而那五个人名是向量中的元素的补充描述。
#就像矩阵里只允许存在一种数据类型,但矩阵的列名可以是字符型。
names(scores)[scores>60]#不是给向量取子集,而是给向量中元素的名称取子集。

练习题3-2

代码语言:R
复制
# 练习3-2
# 1.统计内置数据iris最后一列有哪几个取值,每个取值重复了多少次
iris
table(iris$Species)
table(iris[,5])
table(iris[,ncol(iris)])
table(iris[,"Species"])
# 2.探索列表取子集使用一个中括号和两个中括号的区别(提示:数据结构)
x <- list(m1 = matrix(1:9, nrow = 3),
          m2 = matrix(2:9, nrow = 2))
x

# 判断数据结构:
class(x[1])#数据结构是列表
class(x[[1]])#数据结构是矩阵


# 思考
x[[1]]+1
x[1]+1 #你说它为啥报错
#报错的原因:列表不能直接进行计算而矩阵可以。

4、后置的难点

(1)数据框按照逻辑值取子集

代码语言:R
复制
## 按条件(逻辑值)
df1 <- data.frame(gene   = paste0("gene",1:4),
                  change  = rep(c("up","down"),each = 2),
                  score   = c(5,3,-2,-4))
k = df1$score>0;k
df1[k,]

#筛选score > 0的基因
df1[k,1]#对这个数据框取子集
df1$gene[k]#向量取子集,与向量长度相等且一一对应
df1$gene[df1$score>0]

(2)删除变量

代码语言:R
复制
# 删除 
#赋了一个值发现它没有用,然后把它删掉
rm(x)
rm(df1,df2)
rm(list = ls()) 
ctrl+l#清空控制台
数据结构总结
数据结构总结

引自生信技能树

DAY4

函数与R包总结
函数与R包总结

练习题2-4

代码语言:R
复制
# 练习2-4
# 说明:运行load("gands.Rdata"),即可得到和使用我准备的向量g和s,
# 如有报错,说明你的代码写错或project没有正确打开
load("gands.Rdata")
#load完了以后在enviroment那里就会出现g和s两个向量。
#R特有的变量保存格式:Rdata,有特殊压缩机制。用处是:存储有用的变量,准备下次再用。
#将g,s两个向量存储到gands.Rdata里面去的代码:save(g,s,file="gands.Rdata")
#加载gands.Rdata,让里面存储的变量出现在环境里。

# 1.用函数计算向量g的长度
length(g)
#答案:length
# 2.筛选出向量g中下标为偶数的基因名。
g[seq(2,100,2)]
#答案:seq(2,100,2)
# 3.向量g中有多少个元素在向量s中存在(要求用函数计算出具体个数)?将这些元素筛选出来
table(g %in% s)
#谁在%in%前面,逻辑值就与谁对应;TRUE有63个而向量s只有50元素,那是因为向量g中有重复值。
#g[s%in%g]这个错误答案的原因(不报错,但结果不对):按照逻辑值取子集有个要求就是:与g的长度相同且一一对应。
# 4.生成10个随机数: rnorm(n=10,mean=0,sd=18),用向量取子集的方法,取出其中小于-2的值
z =  rnorm(n=10,mean=0,sd=18)
z
z[z< -2]
z[z<(-2)]

四、函数与R包

1、函数与参数

函数与参数
函数与参数

引自生信技能树

代码语言:R
复制
#↑如果此处↑↑↑↑出现黄色提示条,你就阅读理解一下,然后随便选择↑
jimmy <- function(a,b,m = 2){
  (a+b)^m
}
jimmy(a = 1,b = 2)
jimmy(1,2)
jimmy(3,6)
jimmy(3,6,-2)
#?sort,不懂的函数的参数去查该函数的帮助文档。
#实际参数,形式参数,默认值,大括号里面的东西是这个函数的算法。使用者不用管大括号里面的东西。
#使用者只管:这个函数是干什么的;函数里面的参数是什么意思。
#默认值2不符合自己要求时,可以改成自己想要的数值。
#<-之间要有空格或打个括号,不然会被当成赋值符号

2、R包介绍

3、R包镜像

镜像设置
镜像设置

引自生信技能书

使用镜像,加快R包的下载,不用从大洋彼岸去下载

4、R包的安装与来源

(1)CRAN网站

(2)Bioconductor网站

(3)github

代码语言:R
复制
# 低版本R语言备用的镜像:西湖大学,如果要使用记得去掉下一行代码的井号
#options(BioC_mirror="https://mirrors.westlake.edu.cn/bioconductor")

install.packages("stringr")
install.packages('BiocManager') #先安装BiocManager,才能用BiocManager装其他的包。
BiocManager::install("limma")
install.packages('devtools')
devtools::install_github("jmzeng1314/idmap1") #括号里写作者用户名加包名
#

library(stringr)
require(stringr)

# 分情况讨论

if(!require(stringr))install.packages("stringr")

# 获取帮助
?sd
library(limma)
browseVignettes("limma") #不是每个包都有
ls("package:limma")

5、R包的安装和使用逻辑

R包的安装和使用逻辑1
R包的安装和使用逻辑1

引自生信技能书

R包的安装和使用逻辑2
R包的安装和使用逻辑2

引自生信技能树

练习题4-1

代码语言:R
复制
# 练习4-1
#1、选ACE
# 2、写一个函数,用于计算一个数字的平方减一(例如5^2 -1 = 24),
# 并写出用户使用该函数的代码 。】

#写函数
m = function(a,b){
  a^b-1
}
#使用函数
m(5,2)
#或者有更简单的答案
m = function(x){
x^2-1
}
#使用函数
m(5)
代码语言:R
复制
# 分情况讨论

if(!require(stringr))install.packages("stringr")
#require是一个变形金刚,是可以出现逻辑值的,例如:
as.logical(require(stringr))
!require(stringr)
#if(TRUE)则后面的代码被跳过;if(FALSE)则后面的代码被执行。

6、R包如何使用——获取逻辑

(1)快速查看帮助文档

函数出自哪个包

Description,Usage,Arguments,Examples

(2)找R包介绍页面

R包名字加oackage,在国际版Microsoft搜索

(3)控制台运行browseVignettes("R包名字")

代码语言:R
复制
# 获取帮助
?sd
library(limma)
browseVignettes("limma") #不是每个包都有
ls("package:limma")

练习题4-2

代码语言:R
复制
# 练习4-2 安装以下所有的包
if(!require(data.table))install.packages("data.table")
if(!require(rio))install.packages("rio")
if(!require(tibble))install.packages("tibble")
if(!require(ggplot2))install.packages("ggplot2")
if(!require(ggpubr))install.packages("ggpubr")
if(!require(eoffice))install.packages("eoffice")
if(!require(patchwork))install.packages("patchwork")
if(!require(tidyr))install.packages("tidyr")
if(!require(dplyr))install.packages("dplyr")
if(!require(stringr))install.packages("stringr")
#require可以循环,不会报错;而library会报错。

五、文件的读取

1、常见读取方式

代码语言:R
复制
#文件读写部分
getwd()#显示我们的工作目录
#1.读取ex1.txt
ex1 <- read.table("ex1.txt")#列名没有归位;
#在excel里面第一行和列名不作区分,但R语言里数据框和表格是有区别的,表格的任何一列都是一个向量,只允许一种数据类型存在。
#所以当某个列名(字符型)变成数据框一列(数值型)的某个元素时,这一列数据被污染了。
ex1[2,4]
#数据被污染,去查这个函数的帮助文档,重新设置默认参数。
ex1 <- read.table("ex1.txt",header = T)#header的意思就是“文件第一行是不是列名”。
#2.读取ex2.csv
ex2 <- read.csv("ex2.csv")
#与在excel里面的差别在于,以为第一列没有列名,于是自动补了一个列名,实际上我们第一列是行名。
#还有一个区别在于,把列名里面的特殊字符-改成了小数点,因为在取列时有特殊字符的话,$用起来不丝滑。
ex2 <- read.csv("ex2.csv",row.names = 1,check.names = F)

#注意:数据框不允许重复的行名
rod = read.csv("rod.csv",row.names = 1) #报错
rod = read.csv("rod.csv")

#3.数据框导出
write.csv(ex2,file = "example.csv")
write.table(ex2,file = "example.txt")
##变量名+给导出的文件命名

2、其它读取方式

代码语言:R
复制
#用data.table来读取
library(data.table)
ex1 = fread("ex1.txt")
class(ex1)
ex1 = fread("ex1.txt",data.table = F)
class(ex1)
ex2 = fread("ex2.csv",data.table = F)
#没有直接设置行名的参数

library(tibble)
ex2 = column_to_rownames(ex2,"V1")#第一列设置为行名

#rio
library(rio)
#一个函数支持读取很多格式,见帮助文档
ex1 = import("ex1.txt")#尤其适合读excel文件
#一个函数支持导出很多格式,见帮助文档
export(ex1,file = "ex1.xlsx")#尤其适合读excel文件
文件读取总结
文件读取总结

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • DAY3
    • 三、数据结构——数据框
      • 1、数据框的来源
      • 2、数据框的属性
      • 3、数据框取子集
      • 4、数据框的修改
      • 5、两个数据框的连接
    • 三、数据结构——矩阵和列表
      • 1、矩阵
      • 2、列表
      • 3、补充:元素的名字
      • 4、后置的难点
      • (1)数据框按照逻辑值取子集
      • (2)删除变量
  • DAY4
    • 四、函数与R包
      • 1、函数与参数
      • 2、R包介绍
      • 3、R包镜像
      • 4、R包的安装与来源
      • (1)CRAN网站
      • (2)Bioconductor网站
      • (3)github
      • 5、R包的安装和使用逻辑
      • 6、R包如何使用——获取逻辑
      • (1)快速查看帮助文档
      • (2)找R包介绍页面
      • (3)控制台运行browseVignettes("R包名字")
    • 五、文件的读取
      • 1、常见读取方式
      • 2、其它读取方式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档