生信人应该这样学R语言04.中级变量操作
【生信技能树】生信人应该这样学R语言04.中级变量操作
代码5years/learn-R at master jmzeng1314/5years
我的代码,自己边看视频边手动敲的代码
step2-expr
b = read.table('GSE17215_series_matrix.txt.gz',comment.char = '!', header = T, sep = '\t')#comment.char 删除'!'开头的行
rownames(b) =b[,1]#添加行名
b=b[,-1]#取除去第一列之外的其他列,相当于删除了第一列
b=log2(b)
#mean(b[1,])#第一行的平均值,报错
#b是数据框,应先转换为数值,再取平均值
as.numeric(b[1,])
mean(as.numeric(b[1,]))
#mean(as.numeric(b[2,]))#依次对每一行取平均值
#OR
rowMeans(b)#取行的平均值
head(rowMeans(b))
#for循环
for (i in 1:nrow(b)) {
print(mean(as.numeric(b[i,])))
}
#apply
x=mean(as.numeric(b[i,]))
apply(b, 1, function(x){mean(x)})
##对每一行求方差
apply(b, 1, sd)
#取方差的top50
sort(apply(b, 1, sd),decreasing = T)[1:50]
cg <- names(sort(apply(b, 1, sd),decreasing = T)[1:50])
pheatmap::pheatmap(b[cg,])
#热图
pheatmap::pheatmap(b[1:50,])
#随机取50个画图
sample(1:nrow(b),50)
pheatmap::pheatmap(b[sample(1:nrow(b),50),])
step3-sratbale
a = read.table('SraRunTable.txt',header = T,
sep = '\t')#header表头
View(a)
sort(a$MBases)#按照MBases列排序,默认从小到大
sort(a$MBases)[1]#去第一个值,即最小值
#or
min(a$MBases) #取MBases列的最小值
sort(a$MBases,decreasing = T)[1]#降序排列去第一个值,即最大值
#or
max(a$MBases) #取MBases列的最大值
fivenum(a$MBases)#五分位数,最小值、25%、中位值50%、75%、最大值
a$MBases
boxplot(a$MBases~a$Assay_Type)
table(a$Assay_Type)
wes=a[a$Assay_Type=='WXS',]
rna=a[a$Assay_Type=='RNA-Seq',]
fivenum(wes$MBases)
fivenum(rna$MBases)
table(a$MBases < 5000)#测序值小于5000MBases的文件个数
#FALSE TRUE
#151 31
b=a[a$MBases < 5000,]
View(b)
b = read.table('GSE17215_series_matrix.txt.gz', header = T, sep = '\t')#报错
b = read.table('GSE17215_series_matrix.txt.gz',comment.char = '!', header = T, sep = '\t')#comment.char 删除'!'开头的行
??comment.char
View(b)
write.csv(b,'GSE17215_series_matrix2.csv')
##把GSE17215_series_matrix2.csv的行名去掉
#第一种方法
d =read.csv('GSE17215_series_matrix2.csv')
View(d)
d=d[,-1]#取除去第一列之外的其他列
View(d)
rownames(d) = d[,1]#添加行名
View(d)
#第二种方法,输出CSV文件时设置
write.csv(b,'GSE17215_series_matrix2.csv',row.names = F)
#or
write.table(b,'tmp.csv',sep = ',')
d=d[,-1]#取除去第一列之外的其他列
Jimmy给的代码很详细
step2-expr
rm(list=ls())
b=read.table('GSE17215_series_matrix.txt.gz',##读入该文件
comment.char = '!',header =T,##有!的行不被读入,有表头
sep = '\t')##以制表符分隔
rownames(b)=b[,1]##以b的第一列为行名
b=b[,-1]##将b的第一列去掉
b=log2(b)##对b中数据求log2
mean(as.numeric(b[1,]))##将b第一行数据框类型转换为数值型,再求第一行平均值
mean(as.numeric(b[2,]))##将b第二行数据框类型转换为数值型,再求第二行平均值
head(rowMeans(b))##对b每一行求平均值,用head查看前6行
for(i in 1:nrow(b)){ ##for循环,变化的是i,i从b的第一行一直循环到第n行
print(mean(as.numeric(b[i,])))##将b第i行数据框类型转换为数值型,再求第i行平均值,最后打印出结果
}
apply(b,1,function(x){##apply循环一般针对矩阵或者数据框,1代表对行进行处理,对列进行处理则用2表示,设定一个函数
mean(x)##这个函数是求平均值
})
for(i in 1:nrow(b)){
x=as.numeric(b[i,])##x为b的第i行
y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6]##y赋值为x的第一个元素加第二个元素减去第三个元素加第四个元素减去第五个元素加第六个元素。对向量取元素直接坐标,对dataframe取元素逗号左行逗号右列(list一样)
print(y)##输出显示y
}
apply(b,1,max)##求每一行最大值,是apply(b,1,function(x){max(x)})的简写
rowMax=function(x){##将rowMax定义为一个函数
apply(x,1,max)##这个函数的内容是求每一行的最大值
}
rowMax(b)##用定义好的rowMax函数求b
jimmy <- function(b){##构建一个叫jimmy的函数
for(i in 1:nrow(b)){
x=as.numeric(b[i,])
y=x[1]+x[2]-x[3]+x[4]-x[5]+x[6]
print(y)
}
}
jimmy(b)##对b运行函数jimmy
cg=names(sort(apply(b,1,sd),decreasing = T)[1:50])##对b的每一行求方差,之后从大到小排序,再列出前一到五十的名字
sample(1:nrow(b),50)##sample为随机取值函数,从b的一到n行随机取50个行
pheatmap::pheatmap(b[1:50,])##用b的一到五十行画热图
pheatmap::pheatmap(b[sample(1:nrow(b),50),])##用b中随机取的五十行画热图
pheatmap::pheatmap(b[cg,])##用得到的cg基因画热图
step3-sratbale
a=read.table('SraRunTable.txt',header =T,##读入txt文件,有表头
sep = '\t')##以制表符分隔
sort(a$MBases,decreasing = T)[1]##排序,a中索引MBases列,从大到小排序,并[1]取最大值
max(a$MBases)##a中MBases列的最大值
min(a$MBases)##a中MBases列的最小值
fivenum(a$MBases)##求a中MBases列的五个数:最小值,1/4处值,1/2处值,3/4处值,最大值
a$MBases
table(a$MBases<5000)##计算该列大于5000和小于5000的数的个数
boxplot(a$MBases~a$Assay_Type)##用MBases列和Assay_Type列绘制箱线图,用于展示一组数据的总体分布
table(a$Assay_Type)##统计该列元素频次
wes=a[a$Assay_Type=='WXS',]##取出a中Assay_Type列中为WXS的行,==意为赋值
rna=a[a$Assay_Type=='RNA-Seq',]##取出a中Assay_Type列中为RNA-Seq的行
fivenum(wes$MBases)##求wes表中MBases列的五个数:最小值,1/4处值,1/2处值,3/4处值,最大值
fivenum(rna$MBases)##求rna表中MBases列的五个数:最小值,1/4处值,1/2处值,3/4处值,最大值
搞成了买家秀和买家秀,只是买家秀的太缩水了!加油!