【生信技能树】R语言练习题 - 初级(1-7题)

题目来源:http://www.bio-info-trainee.com/3793.html

1.打开 Rstudio 告诉我它的工作目录。
告诉我在你打开的Rstudio里面getwd()代码运行后返回的是什么?

> getwd()
[1] "D:/Bioinformatics/20190413GZ"
  1. 新建6个向量,基于不同的原子类型。(重点是字符串,数值,逻辑值)
> a1 <- 1:10
> a1
 [1]  1  2  3  4  5  6  7  8  9 10
> class(a1)
[1] "integer"
> a2 <- c('hello','the','world')
> a2
[1] "hello" "the"   "world"
> class(a2)
[1] "character"
> a3 <- c(T,T,T,F,F,T,T,F)
> a3
[1]  TRUE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE
> class(a3)
[1] "logical"
> a4 <- 607L
> a4
[1] 607
> class(a4)
[1] "integer"
> a5 <- seq(from = 0, to = 20, by =2)
> a5
 [1]  0  2  4  6  8 10 12 14 16 18 20
> class(a5)
[1] "numeric"
> a6 <- c(13.14,14)
> a6
[1] 13.14 14.00
#14也带小数位了
> class(a6)
[1] "numeric"
  1. 新建一些数据结构,比如矩阵,数组,数据框,列表等重点是数据框,矩阵)在你新建的数据框进行切片操作,比如首先取第1,3行, 然后取第4,6列。

参考:R语言数据结构

#数组
> arr <- array(1:8)
> arr
[1] 1 2 3 4 5 6 7 8
#矩阵
> matr <- matrix(1:8,2)
> matr
     [,1] [,2] [,3] [,4]
[1,]    1    3    5    7
[2,]    2    4    6    8
> abc <- paste0('gene',1:5)
> gname <- c('a','b','c','d','e')
> a1 <- c(floor(rnorm(5,5000,300)))
> a2 <- c(floor(rnorm(5,3000,500)))
#数据框
> expr <- data.frame(id=abc,genename=gname,s1=a1,s2=a2)
> expr
     id genename   s1   s2
1 gene1        a 4941 3159
2 gene2        b 5297 2845
3 gene3        c 5362 3055
4 gene4        d 4753 2714
5 gene5        e 4806 3361
> dim(expr)
[1] 5 4
> View(expr)
【生信技能树】R语言练习题 - 初级(1-7题)_第1张图片
View(expr)
  1. 使用data函数来加载R内置数据集 rivers 描述它。并且可以查看更多的R语言内置的数据集:https://mp.weixin.qq.com/s/dZPbCXccTzuj0KkOL7R31g
> data("rivers") #北美141条河流长度
> rivers
  [1]  735  320  325  392  524  450 1459  135  465  600  330  336  280
 [14]  315  870  906  202  329  290 1000  600  505 1450  840 1243  890
 [27]  350  407  286  280  525  720  390  250  327  230  265  850  210
 [40]  630  260  230  360  730  600  306  390  420  291  710  340  217
 [53]  281  352  259  250  470  680  570  350  300  560  900  625  332
 [66] 2348 1171 3710 2315 2533  780  280  410  460  260  255  431  350
 [79]  760  618  338  981 1306  500  696  605  250  411 1054  735  233
 [92]  435  490  310  460  383  375 1270  545  445 1885  380  300  380
[105]  377  425  276  210  800  420  350  360  538 1100 1205  314  237
[118]  610  360  540 1038  424  310  300  444  301  268  620  215  652
[131]  900  525  246  360  529  500  720  270  430  671 1770
> length(rivers) # 数据个数
[1] 141
> mean(rivers) # 平均值
[1] 591.1844
> median(rivers) # 中位数
[1] 425
> max(rivers) # 最大值
[1] 3710
> which.max(rivers) # 最大值下标
[1] 68
> min(rivers) # 最小值
[1] 135
> which.min(rivers) # 最小值下标
[1] 8
> range(rivers) # 范围
[1]  135 3710
> sorted_rivers <- sort(rivers) # 排序
> sorted_rivers
  [1]  135  202  210  210  215  217  230  230  233  237  246  250  250
 [14]  250  255  259  260  260  265  268  270  276  280  280  280  281
 [27]  286  290  291  300  300  300  301  306  310  310  314  315  320
 [40]  325  327  329  330  332  336  338  340  350  350  350  350  352
 [53]  360  360  360  360  375  377  380  380  383  390  390  392  407
 [66]  410  411  420  420  424  425  430  431  435  444  445  450  460
 [79]  460  465  470  490  500  500  505  524  525  525  529  538  540
 [92]  545  560  570  600  600  600  605  610  618  620  625  630  652
[105]  671  680  696  710  720  720  730  735  735  760  780  800  840
[118]  850  870  890  900  900  906  981 1000 1038 1054 1100 1171 1205
[131] 1243 1270 1306 1450 1459 1770 1885 2315 2348 2533 3710
> table(rivers) # 统计
rivers
 135  202  210  215  217  230  233  237  246  250  255  259  260  265 
   1    1    2    1    1    2    1    1    1    3    1    1    2    1 
 268  270  276  280  281  286  290  291  300  301  306  310  314  315 
   1    1    1    3    1    1    1    1    3    1    1    2    1    1 
 320  325  327  329  330  332  336  338  340  350  352  360  375  377 
   1    1    1    1    1    1    1    1    1    4    1    4    1    1 
 380  383  390  392  407  410  411  420  424  425  430  431  435  444 
   2    1    2    1    1    1    1    2    1    1    1    1    1    1 
 445  450  460  465  470  490  500  505  524  525  529  538  540  545 
   1    1    2    1    1    1    2    1    1    2    1    1    1    1 
 560  570  600  605  610  618  620  625  630  652  671  680  696  710 
   1    1    3    1    1    1    1    1    1    1    1    1    1    1 
 720  730  735  760  780  800  840  850  870  890  900  906  981 1000 
   2    1    2    1    1    1    1    1    1    1    2    1    1    1 
1038 1054 1100 1171 1205 1243 1270 1306 1450 1459 1770 1885 2315 2348 
   1    1    1    1    1    1    1    1    1    1    1    1    1    1 
2533 3710 
   1    1 

  1. 下载 https://www.ncbi.nlm.nih.gov/sra?term=SRP133642 里面的 RunInfo Table 文件读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素。(参考B站生信小技巧获取runinfo table) 这是一个单细胞转录组项目的数据,共768个细胞,如果你找不到RunInfo Table 文件,可以点击下载,然后读入你的R里面也可以。

5.1 打开链接https://www.ncbi.nlm.nih.gov/sra?term=SRP133642,点击Send results to Run selector链接(图中红框)

【生信技能树】R语言练习题 - 初级(1-7题)_第2张图片

5.2 点击 RunInfo Table按钮即可下载 RunInfo Table文件(图中红圈)
【生信技能树】R语言练习题 - 初级(1-7题)_第3张图片

> rm(list = ls())
> options(stringsAsFactors = F)
> sra <- read.table(file = "SraRunTable.txt",header = T,sep = ',')
> dim(sra) # 查看data.frame维度
[1] 768  31
> ncol(sra) #查看data.frame列数
[1] 31
>View(sra) #用表格形式观察data.frame
#查看每一列都是什么属性的元素
> for (i in colnames(sra)) paste(i,class(sra[,i])) %>% print()
Error in paste(i, class(sra[, i])) %>% print() : 
  could not find function "%>%"

报错了,找不到%>%
google报错,然后就找到了这个。
https://stackoverflow.com/questions/30248583/error-could-not-find-function

【生信技能树】R语言练习题 - 初级(1-7题)_第4张图片
stackoverflow上的解决方案

ok,复制粘贴。

> install.packages("magrittr") # only needed the first time you use it
> install.packages("dplyr")    # alternative installation of the %>%
> library(magrittr) # need to run every time you start R and want to use %>%
> library(dplyr)    # alternative, this also loads %>%
> for (i in colnames(sra)) paste(i,class(sra[,i])) %>% print()
[1] "BioSample character"
[1] "Experiment character"
[1] "MBases integer"
[1] "MBytes integer"
[1] "Run character"
[1] "SRA_Sample character"
[1] "Sample_Name character"
[1] "Assay_Type character"
[1] "AssemblyName character"
[1] "AvgSpotLen integer"
[1] "BioProject character"
[1] "Center_Name character"
[1] "Consent character"
[1] "DATASTORE_filetype character"
[1] "DATASTORE_provider character"
[1] "InsertSize integer"
[1] "Instrument character"
[1] "LibraryLayout character"
[1] "LibrarySelection character"
[1] "LibrarySource character"
[1] "LoadDate character"
[1] "Organism character"
[1] "Platform character"
[1] "ReleaseDate character"
[1] "SRA_Study character"
[1] "age character"
[1] "cell_type character"
[1] "marker_genes character"
[1] "source_name character"
[1] "strain character"
[1] "tissue character"

强迫症患者对于这每行行首的[1]相当怨念,我会要解决这个问题的。
然后上面那个数据框的切片操作

> #在你新建的数据框进行切片操作,比如首先取第1,3行, 然后取第4,6列
> df_r13 <- sra[c(1,3),]
> dim(df_r13)
[1]  2 31
> View(df_r13)
> df_c46 <- sra[,c(4,6)]
> dim(df_c46)
[1] 768   2
> View(df_c46)
【生信技能树】R语言练习题 - 初级(1-7题)_第5张图片
df_r13

【生信技能树】R语言练习题 - 初级(1-7题)_第6张图片
df_c46
  1. 下载 https://www.ncbi.nlm.nih.gov/geo/query/acc.cgi?acc=GSE111229 里面的样本信息sample.csv读入到R里面,了解这个数据框,多少列,每一列都是什么属性的元素。(参考 https://mp.weixin.qq.com/s/fbHMNXOdwiQX5BAlci8brA 获取样本信息sample.csv)如果你实在是找不到样本信息文件sample.csv,也可以点击下载。

6.1 打开GEO主页https://www.ncbi.nlm.nih.gov/geo/,点击Samples链接(图中红框)

【生信技能树】R语言练习题 - 初级(1-7题)_第7张图片
GEO主页

6.2 在搜索栏中输入 GSE111229,点击 Search按钮,然后点击 Export按钮
【生信技能树】R语言练习题 - 初级(1-7题)_第8张图片

在弹出的对话框点击 Export按钮,得到sample.csv;
【生信技能树】R语言练习题 - 初级(1-7题)_第9张图片

> rm(list = ls())
> options(stringsAsFactors = F)
> geo<- read.csv(file = "sample.csv")
> dim(geo)
[1] 768  12
> ncol(geo)
[1] 12
> View(geo)
> library("magrittr")
> for (i in colnames(geo)) paste(i,class(geo[,i])) %>% print()
[1] "Accession character"
[1] "Title character"
[1] "Sample.Type character"
[1] "Taxonomy character"
[1] "Channels integer"
[1] "Platform character"
[1] "Series character"
[1] "Supplementary.Types character"
[1] "Supplementary.Links character"
[1] "SRA.Accession character"
[1] "Contact character"
[1] "Release.Date character"

  1. 把前面两个步骤的两个表(RunInfo Table 文件,样本信息sample.csv)关联起来,使用merge函数。
#查看两个data.frame里相关的列
> rm(list = ls())
> options(stringsAsFactors = F)
> sra <- read.table(file = "SraRunTable.txt",header = T,sep = '\t')
> geo<- read.csv(file = "sample.csv")
> library(magrittr) #需要用到 %>%
> for (i in colnames(sra)) {
+   if (i %in% colnames(geo)) print(i)
+ }
[1] "Platform"
#直接查看相同列名,平台
> sra[1,"Platform"]
[1] "ILLUMINA"
> geo[1,"Platform"]
[1] "GPL13112"
#"平台"列的内容,并不相同。
#考虑在数据里查看相同内容:
> for (i in colnames(sra)) {
+   for (j in colnames(geo)) {
+     if (sra[,i] %in% geo[,j]) {paste(i,j) %>% print()}
+   }
+ }
[1] "Experiment SRA.Accession"
[1] "Sample_Name Accession"
[1] "Organism Taxonomy"
#以上三组,就是两个data.frame内容一致的列,可以以此为标准合并data.frame
df_merge <- merge(sra,geo,by.x="Experiment",by.y="SRA.Accession")
#df_merge <- merge(sra,geo,by.x="Sample_Name",by.y="Accession")
#df_merge <- merge(sra,geo,by.x="Organism",by.y="Taxonomy")
> dim(df_merge)
[1] 768  42
> dim(sra)
[1] 768  31
> dim(geo)
[1] 768  12
# 42=31+12-1
#其实,其中还有两对("Sample_Name"和"Accession","Organism"和"Taxonomy")内容是一致的,都可以二取其一。

你可能感兴趣的:(【生信技能树】R语言练习题 - 初级(1-7题))