前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >生信课程note-3

生信课程note-3

原创
作者头像
素素
发布2023-02-09 11:37:29
1.3K0
发布2023-02-09 11:37:29
举报

class3

数据框、矩阵和列表

向量-一维:

表格—二维 :

matrix 矩阵-二维,只允许一种数据类型;data.frame数据框-二维,每列只允许一种数据类型。

list列表:可装万物 向量 矩阵 数据框 数字 列表 。

用class可以判断是矩阵或数据框,还可以用is族函数来判断。

#重点:数据框

#1.数据框来源

# (1)用代码新建

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

# (3)读取表格文件 (对数据框操作)

# (4)R语言内置数据 (可以直接使用的的数据框)heatmap(volcano) ,iris,letters,LETTERS

是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

#3.数据框属性

#维度、行、列

dim(df1)

nrow(df1)

ncol(df1)

#行名,列名

rownames(df1)

colnames(df1)

#4.数据框取子集

df1$score 向量取子集用的是[] 取score这一列

df1$gene #删掉score,按tab键试试

mean(df1$score)

## 按坐标

df1[2,2]

df1[2,] 第二行

df1[,2]

df1[c(1,3),1:2] 1,3行,1,2列 向量是x[c(1,5)]即第一个和第五个数

## 按名字

df1[,"gene"]

df1[,c("gene","change")]

df1[,c('gene','change')]

## 按条件(逻辑值)

df1[df1$score>0,] ,取出score>0的行。¥df1[df1$score>0,"gene"]/df1[df1$score>0,1]/df1$gene[df1$score>0],取出score>0的基因。

用于取子集的逻辑值向量:

与x对应,不必须由x生成。(例子中即通过score为gene取子集)

记住,==是等于的意思,>-是赋值的意思

## 代码思维

#如何取数据框的最后一列?

df1[,3]

df1[,ncol(df1)]

#如何取数据框除了最后一列以外的其他列?

df1[,-ncol(df1)] 注:!-给数值用,!给逻辑值用。

#筛选score > 0的基因

df1[df1$score > 0,1]

df1$gene[df1$score > 0]

#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) <- c("r1","r2","r3","r4")

#只修改某一行/列的名

colnames(df1)[2] <- "CHANGE"

列名和行名都是向量

#6.两个数据框的连接

test1 <- data.frame(name = c('jimmy','nicker','Damon','Sophie'),

blood_type = c("A","B","O","AB"))

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")

##### 矩阵和列表

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

t(m):转置 行变列

m<-as.data.frame(m) 转换为数据框 必须要赋值

矩阵画热图: pheatmap::pheatmap(m) 热图中的黑线是聚类树

pheatmap::pheatmap(m,cluster_cols = F,cluster_rows = F) 此代码是去除聚类

#列表

新建和取子集

l <- list(m1 = matrix(1:9, nrow = 3),

m2 = matrix(2:9, nrow = 2))

l

列表的下一级也叫元素。

l[[2]]

l$m1

# 补充:元素的名字 向量的名字

scores = c(100,59,73,95,45)

names(scores) = c("jimmy","nicker","Damon","Sophie","tony")

scores

结果:jimmy nicker Damon Sophie tony

100 59 73 95 45

取子集:

scores["jimmy"] 结果100

scores[c("jimmy","nicker")]

names(scores)[scores>60]

# 删除

rm(l) 删除一个

rm(df1,m)删除多个

rm(list=ls())删除全部

清空控制台ctrl+l

而扫把标志仅仅是删除记录,数据还在。

rm(df1,df2)

rm(list = ls())

改变列的顺序

a <- a[,c(1,3,4,2)]

练习3-1

# 练习3-1

# 1.读取exercise.csv这个文件,赋值给test。

test <- read.csv("exercise.csv")

# 2.求test第一列数值的中位数

median(test$Petal.Length)

# 3.筛选test中,Species列的值为a或c的行

test[test$Species!="b",]

test[test$Species=="a"|test$Species=="c",]

test[test$Species %in% c("a","c"),]

练习3-2

# 练习3-2

# 1.统计内置数据iris最后一列有哪几个取值,每个取值重复了多少次

iris[,ncol(iris)]

table(iris$Species)

# 2.提取内置数据iris的前5行,前4列,并转换为矩阵,赋值给a。

class(iris)

iris[(1:5),(1:4)]

a <- iris[(1:5),(1:4)]

a <- as.matrix(a)

a

class(a)

# 3.将a的行名改为flower1,flower2...flower5。

rownames(a) <- c("flower1","flower2","flower3","flower4","flower5")

rownames(a) <- paste0("flower",1:nrow(a))

a

# 4.探索列表取子集l[2]和l[[2]]的区别(提示:数据结构)

class(l[2])

class(l[[2]])

引自生信技能树

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档