美文网首页
day38 R语言 中级变量操作

day38 R语言 中级变量操作

作者: meraner | 来源:发表于2022-07-30 09:34 被阅读0次

第四课 中级变量操作

  1. 保存数据时去掉行名操作
    write.csv(b,file='test2.csv',row.names = F)# 保存的test2.csv文件就没有行名了。
    2.按照某一列排序(类似excel里面排序)
    sort(b$xxx,decreasing=T)[1]#意思是取xxx这一列里面从大到小排列后,的第一个数,就是这一列最大值。
    也可以用下面的函数显示最大,最小值。
    max(b$xxx)
    min(b$xxx)
    fivenum(b$xxx) 可以拿到百分之0,25,50,75,100,这五个数,默认都是从小到大。
    3.table函数进行计数或统计频次
    table(b$xxx<5000) #可统计xxx这一列中小于5000的有几个,不小于5000的有几个。

4.建立新的数据
比如b这个数据中,要把OCF_LTot这一列里大于5的这些单独分出来:

> table(b$OCF_LTot>10)
FALSE  TRUE 
20123    13 
> c=b[b$OCF_LTot>10,] #c这个数据就有13行,都是OCF_LTot>10
>boxplot(b$OCF_LTot~b$strand) #把OCF_LTot这一列数据画箱图,分组是按照strand这一列分。
image.png

再比如想取chr这一列中chr1的数据出来,可以这么操作

> table(b$chr=='chr1')

FALSE  TRUE 
18070  2066 
> ch1=b[b$chr=='chr1',] #建立一个新的变量ch1,行满足是chr为chr1,列没有要求

5.行平均值
方法一:mean

Mean(as.numeric(a[1,]))
Mean(as.numeric(a[2,]))
...

方法二:rowMeans函数
head(rowMeans(a))#把数据a求其行平均值(a必须为数值型) , 显示前10行

  1. R里的循环一
    for (i in 1 : nrow(b) {
    print(Mean(as.numeric(a[i,])))
    }
    就会把a中每一行的平均值输出。

7.R里的循环二
apply(b,1,function(x){
mean(x)
})
取b中的数据,1表示按照行来取,function(x)是把从b中取出来的行打包成x,后面进行平均值计算。
下面练习,是先生成30个符合正态分布的数据,然后拍成6行的矩阵。之后用apply的两种方法求每行的平均值。还可以直接用rowMeans函数来求每行平均值。

> mydata<-matrix(rnorm(30),nrow=6)
> apply(mydata,1,mean) #每行平均值
> apply(mydata,1,function(x){mean(x)}) #每行平均值
> rowMeans(mydata) #每行平均值

  1. 自定义函数
    比如想得到每行最大值,可以直接用apply函数,也可以先定义一个rowMax函数,以后都可以调用之。
> apply(mydata,1,max) #每行最大值
> rowMax=function(x){apply(x,1,max)} #定义rowMax这个函数
> rowMax(mydata) #也能求出每行最大值
  1. 对数据的每一行进行较为复杂的计算。
for(i in 1:nrow(mydata)){
  x=as.numeric(mydata[i,])
  y=x[1]+x[2]-x[3]*x[4]
  print(y)
}

先把每一行里的数据提出为x这个向量。然后取x向量里的对应数据,把计算公式标注清楚。
然后再进一步设计个新的函数,以后就可以调用这个函数计算啦。效果和上面一样。

mystat<-function(mydata){
for(i in 1:nrow(mydata)){
  x=as.numeric(mydata[i,])
  y=x[1]+x[2]-x[3]*x[4]
  print(y)
}
}
mystat(mydata)

10.计算后排序,取前50个

> mydata<-matrix(rnorm(500),ncol=5) #先产生一个矩阵出来,100行的
> sort(apply(mydata,1,sd),decreasing = T)[1:50] #把每一行的sd值算出来,降序排列,取前50个

11.数值数据行名要进行指定才有。
之前建立的mydata数据并不是数据框,所以在输入rowname(mydata)的时候显示NULL

>rowname(mydata)
NULL
>str(mydata)
num [1:100, 1:5] 0.76346 0.85663 0.00185 0.34001 1.55251 ...#这时mydata只是一个数据型向量
>is.data.frame(mydata)
FALSE
>mydata=as.data.frame(mydata) #转变成数据框
>rowname(mydata) 这时候就自动有行名了
 [1] "1"   "2"   "3"   "4"   "5"   "6"   "7"   "8"   "9"   "10"  "11"  "12"  "13" 
 [14] "14"  "15"  "16"  "17"  "18"  "19"  "20"  "21"  "22"  "23"  "24"  "25"  "26" 
 [27] "27"  "28"  "29"  "30"  "31"  "32"  "33"  "34"  "35"  "36"  "37"  "38"  "39" 
 [40] "40"  "41"  "42"  "43"  "44"  "45"  "46"  "47"  "48"  "49"  "50"  "51"  "52" 
 [53] "53"  "54"  "55"  "56"  "57"  "58"  "59"  "60"  "61"  "62"  "63"  "64"  "65" 
 [66] "66"  "67"  "68"  "69"  "70"  "71"  "72"  "73"  "74"  "75"  "76"  "77"  "78" 
 [79] "79"  "80"  "81"  "82"  "83"  "84"  "85"  "86"  "87"  "88"  "89"  "90"  "91" 
 [92] "92"  "93"  "94"  "95"  "96"  "97"  "98"  "99"  "100"
>rownames(mydata)=mydata[,3] # 可以取第三列作为行名,但行名必须是唯一的
> rownames(mydata)=1:100 #也可以直接就用数字表示

12.做热图
安装包pheatmap,再对mydata这个数据做热图

install.packages("pheatmap")
pheatmap::pheatmap(mydata[1:50,])
pheatmap::pheatmap(mydata[1:10,1:3]) #取1-10这十行,1-3这三列,进行聚类热图

相关文章

  • day38 R语言 中级变量操作

    第四课 中级变量操作 保存数据时去掉行名操作write.csv(b,file='test2.csv',row.na...

  • R语言基本操作

    ##R语言数据的基本操作 例子:mtcars数据 str(mtcars) #结构 变量几个 table(mpg)...

  • R基础快速入门(2)

    文集地址 R语言快速入门 R语言变量 R语言中的变量可以存储原子向量,原子向量组或许多R对象的组合 注意:使用ca...

  • 《学习小组Day 4笔记--JnG》

    今天是进行R语言操作的日子 1.首先是下载R语言啦以及其操作平台Rstudio 2.简单的入手R语言操作命令R语言...

  • R语言 变量

    变量为我们提供了程序可以操作的命名存储, R语言中的变量可以存储原子向量,原子向量组或许多Robject的组合。有...

  • R语言变量

    变量为我们提供了我们的程序可以操作的命名存储。 R语言中的变量可以存储原子向量,原子向量组或许多Robject的组...

  • 学习小组Day5笔记--LA

    R语言的操作 1.R语言的操作前提知识 1.R语言赋值,a <- 2.Console是输入命令的控制台 3.R语言...

  • R语言作业·中级

    【作业1】请根据R包org.Hs.eg.db找到下面ensembl 基因ID 对应的基因名(symbol) [提示...

  • R语言作业—中级

    教程对应B站:【生信技能树】生信人应该这样学R语言配套资料:B站的11套生物信息学公益视频配套讲义、练习题及思维导...

  • R语言学习

    R语言操作基础

网友评论

      本文标题:day38 R语言 中级变量操作

      本文链接:https://www.haomeiwen.com/subject/bwwbirtx.html