#11.19
x <- sample(1:100,78)
x
#矩阵
matrix(x,nrow=7) #把一个向量变成一个矩阵
x1=sample(1:100,7)
x2=11:17;x2
x3=sample(1:10,7)
x3
#多个向量变成矩阵是有要求的:1,长度相同2,类型相同
cbind(x1,x2,x3) #把多个向量变成矩阵;多个向量变成矩阵是有要求的:1,长度相同2,类型相同
#数据框
y1=sample(1:100,7)
y2=letters[1:7]
y3=sample(1:10,7)
data.frame(y1,y2,y3)
#拼成数据框的要求就是:长度相同,数据表类型不同(可以不同)
#list:长度可以不同,数据类型可以不同
#抽样的意思,1到100里面取8个数
#重点:数据框
#1.数据框来源
# (1)在R中新建
# (2)由已有数据转换或处理得到
# (3)从文件中读取
# (4)内置数据集
#2.新建和读取数据框
options(stringsAsFactors = F)
#options表示设置,不要将里面的字符串强制转变为因子
df <- data.frame(gene = c("gene1","gene2","gene3"),
sam = c("sample1","sample2","sample3"),
exp = c(32,34,45))
df
df <- data.frame(gene = paste0("gene",1:3),
sam = paste0("sample",1:3),
exp = c(32,34,45))
df
df2 <- read.csv("gene.csv") #读取csv函数
#如果读取这个代码报错了,说明没有放在工作目录
df2
#3.数据框属性描述
#
dim(df) #维度(告诉你有几行几列)
nrow(df) #row是行
ncol(df) #ncol是列
#
rownames(df) #行名
colnames(df) #列名
# 练习3-1
# 1.新建图示数据框,赋值给test1
# (提示:后三列是用函数生成的随机数,
# 数值不必完全和我截图的相同)
test1<- data.frame(gene = paste0("gene",1:15),
s1 = sample(1:100,15),
s2 = sample(1:100,15),s3 = sample(1:100,15))
test1
# 2.读取excise.csv这个文件,赋值给test2。
test2 <- read.csv("excise.csv") #只要是在工作目录下,就可以读取的
test2
# 3.使用函数,查看test2的列名。##返回值是向量
rownames(test2) #行名
colnames(test2)
# 4.使用函数,查看test2的行数和列数。 #返回值是数值。
nrow(test2) #row是行
ncol(test2) #ncol是列
#4.数据框取子集
df[2,2] #取第二行第二例。逗号左边是行,右边是列
df[2,] #取第二行
df[,2] #取第二列
df[c(1,3),1:2] #中括号里面的逗号,是唯独的分隔,左边是行右边是列
df[,"gene"]
df[,c('gene','exp')]
df$exp ##读取exp这一列的数据
#删掉exp,按tab键试试
ncol(df)
mean(df$exp)
df
#5.数据框编辑
#改一个格
df[3,3]<- 5
#改一整列
df$exp<-c(12,23,50)
#新增abc这一列,并且赋值
df$abc <-c(23,15,37)
df
#改行名和列名
rownames(df) <- c("r1","r2","r3")
df
colnames(df) <- c("r1","r2","r3")
df
#只修改某一行/列的名
rownames(df)[2]="x"
df
# 练习3-2
# 1. test = read.csv(“excise.csv”),提取test的第二行
test2 <- read.csv("excise.csv") #只要是在工作目录下,就可以读取的
test2
test2[2,]
# 2.提取第3行第4列
test2[3,4]
# 3.求第二列数值的中位数
median(test2$s2)
# 4.按照列名,同时提取s1,s3两列。
test2[,c(2,4)]
test2[,c("s1","s3")]
# 5.修改后三列的列名为“sample1”,“sample2”,“sample3”!!!!!!!!!!!!!!!!!!!!!
colnames(test2)[2:4]
colnames(test2)[2:4]<- c("sample1","sample2","sample3")
# 6.提取sample3列数值大于0的所有行??????????不懂啊不懂啊
test2$sample3
test2$sample3>0
test2[test2$sample3>0,]
#6.数据框进阶
#(1)行数较多的数据框可截取前/后几行查看
iris
head(iris) #默认返回六行
head(iris,3)
tail(iris) #查看数据框后几行
#(2)行列数都多的数据框可取前几行前几列【查看】
iris[1:3,1:3] #不经过赋值,就只是输出、看看
#(3) 查看每一列的数据类型和具体内容
str(df)
str(iris)
#(4)如果列名顺序错乱,如何按照指定顺序重排?
#https://mp.weixin.qq.com/s/rA92iZS8HUiuwlyrPirHdA
#(5)去除含有缺失值的行
na.omit(df) #吞掉NA
#生成一个有NA的数据框
df<-data.frame(X1 = LETTERS[1:5],X2 = 1:5)
df
df[2,2] <- NA
df[4,1] <- NA
df
#(6)两个表格的链接
#cbind 按照“列”连接——————行数相同
#rbind 按照“行”连接———————列数相同
test1 <- data.frame(name = c('jimmy','nicker','doodle'),
blood_type = c("A","B","O"))
test1
test2 <- data.frame(name = c('doodle','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('doodle','jimmy','lucy','nicker'),
weight = c(140,145,110,138))
tmp =merge(test1,test2,by="name")
merge(test1,test3,by.x = "name",by.y = "NAME")
#####矩阵和列表
m <- matrix(1:9, nrow = 3)
m
colnames(m) <- c("a","b","c") #列名
m
#下面取子集
#整行
m[2,]
#整列
m[,1]
#单个格
m[2,3]
#多个格
m[2:3,1:2]
#转置和转换
colnames(m) <- c("a","b","c")
m
t(m)
as.data.frame(m) #转换为数据框
#矩阵画热图????????
library(pheatmap)
pheatmap::pheatmap(m)
#列表
l <- list(m=matrix(1:9, nrow = 3),
df=data.frame(gene = paste0("gene",1:3), #左边是元素的名字,右边是内容
sam = paste0("sample",1:3),
exp = c(32,34,45)),
x=c(1,3,5))
l
l[[2]] #取子集
class( l[[2]]) #有几个中括号,取出来的数据类型不一样
class(l[2])
l[2]
l$df
#补充:元素的名字
#(1)向量
x=1:10
names(x)=letters[1:10]
x
x["a"]
#(2)数据框
df
names(df)
df[,"X1"]
#(3)列表
names(l)
l[["df"]]
#练习3-3
#1.统计iris最后一列有哪几个重复值,分别重复了多少次
iris[,5]
unique(iris[,5])
table(iris[,5])
#2.提取iris的前4列,并转换为矩阵,赋值给test。
r <- iris[,1:4]
test <- as.matrix(r)
#3.将test的行名改为flower1,flower2...flower149,flower150。
rownames(test) <- paste0("flower",1:150)
#4.将test的第51到100行删除
test[-(51:100),]
#5.将iris和test组成一个列表,赋值给tl
t1 <- list(iris,test)
t1
#6.提取tl的第二个元素
t1[[2]]
names(t1)[2] <-"td"
t1[[2]]
t1
#删除
#删除一个
rm(l)
l
#删除多个
rm(df,m)
#删除全部
rm(list = ls())
#清空控制台
#ctrl+l
#补充元素的名字 names()
x <- 1:10
names(x)=letters[1:10]
x
matchtest <- load("matchtest.Rdata")
View(x)
View(y)
m <- x$file_name
n <- colnames(y)
k <- x$ID[match(n,m)]
#所以math(a,b)的意思就是,根据a中数据的排序方式,返回b中数据对应a的位置索引序号
colnames(y) <- k
View(y)
load("matchtest.Rdata")
x
y
#colnames(y)的下标
match(x$file_name,colnames(y))
#x$file_name 的下标
match(colnames(y),x$file_name)
##方法一:将y 列的顺序调整的和x$filename一致
y2 = y[,match(x$file_name,colnames(y))]
colnames(y2) == x$file_name
##方法二:
colnames(y) = x$ID[match(colnames(y),x$file_name)]
网友评论