大杂烩,味道好生物信息学数据-R语言-图表-决策-Linux-Python

好用的R小知识

2019-11-14  本文已影响0人  程凉皮儿

学习资料来自https://www.jianshu.com/p/3d0b7bcb0fd7

数据读取与基本操作

数据来源:https://raw.githubusercontent.com/Bioconductor/BiocWorkshops/master/100_Morgan_RBiocForAll/ALL-phenoData.csv
打开后是一个网页形式的展示信息为4列,"Sample","sex","age","mol.biol",打开R编辑器,复制粘贴到目录下保存。
R编辑器的功能也是很强大的,平时我都没有用到如下列表的功能

R编辑器可做到的事情
最常用到的只是第一个脚本功能,现在可以直接从网页上复制数据粘贴到写字板保存在当前目录下。 粘贴后的文本命名为fname,在当前目录下就出现一个文件
读入R:
rm(list = ls())
options(stringsAsFactors = F)

pdata <- read.csv('fname')
#查看读入的资料
head(pdata)
dim(pdata)
summary(pdata)
class(pdata)

读入后通过赋值,环境变量中多出一个数据框来,查看数据情况发现有一些缺失项


读入R

通过上述指令查看结果与原来总结该知识点的简书作者稍有不同,可能是操作系统或者读入方式的差异导致

> head(pdata)
  Sample sex age mol.biol
1  01005   M  53  BCR/ABL
2  01010   M  19      NEG
3  03002   F  52  BCR/ABL
4  04006   M  38 ALL1/AF4
5  04007   M  57      NEG
6  04008   M  17      NEG
> dim(pdata)
[1] 128   4
> summary(pdata)
    Sample              sex                 age       
 Length:128         Length:128         Min.   : 5.00  
 Class :character   Class :character   1st Qu.:19.00  
 Mode  :character   Mode  :character   Median :29.00  
                                       Mean   :32.37  
                                       3rd Qu.:45.50  
                                       Max.   :58.00  
                                       NA's   :5      
   mol.biol        
 Length:128        
 Class :character  
 Mode  :character  
                   
> class(pdata)
[1] "data.frame"
> class(pdata$Sample)
[1] "character"

他的默认读入第一列的类型是factor,而想要的是characte,所以他通过读入的参数colClasses = c('character','factor','integer','factor')来设定。

取子集

这个基础又常用的操作,真的很重要,学会了这个就入门了R,我是这么认为的。
这里前人的笔记总结的很好就直接用了~这个操作用来过滤是超级实用的

# 名称
pdata[1:5, c("sex", "mol.biol")]
# 位置
pdata[1:5, c(2, 3)]
# 逻辑
subset(pdata, sex == "F" & age > 50)
#判断后过滤
bcrabl <- subset(pdata, mol.biol %in% c("BCR/ABL", "NEG"))

查看并修改因子型

后面还是需要修改一下读入的数据类型,因为性别和分子标识这2个指标可能是后面绘图所需要使用的,因此这两列需要设置为因子;设置方式就是读入时加入参数即可。然后有些因子是空值,需要筛选掉,只保留有数据的因子。

> table(bcrabl$mol.biol)

ALL1/AF4  BCR/ABL E2A/PBX1      NEG   NUP-98  p15/p16 
       0       37        0       74        0        0 
> factor(bcrabl$mol.biol)
  [1] BCR/ABL NEG     BCR/ABL NEG     NEG     NEG     NEG    
  [8] NEG     BCR/ABL BCR/ABL NEG     NEG     BCR/ABL NEG    
 [15] BCR/ABL BCR/ABL BCR/ABL BCR/ABL NEG     BCR/ABL BCR/ABL
 [22] NEG     BCR/ABL NEG     BCR/ABL NEG     BCR/ABL NEG    
 [29] BCR/ABL BCR/ABL NEG     BCR/ABL BCR/ABL BCR/ABL NEG    
 [36] BCR/ABL NEG     NEG     NEG     BCR/ABL BCR/ABL BCR/ABL
 [43] NEG     NEG     NEG     NEG     BCR/ABL BCR/ABL NEG    
 [50] NEG     NEG     NEG     BCR/ABL NEG     NEG     NEG    
 [57] NEG     NEG     BCR/ABL BCR/ABL NEG     NEG     BCR/ABL
 [64] BCR/ABL NEG     NEG     NEG     NEG     BCR/ABL NEG    
 [71] BCR/ABL BCR/ABL BCR/ABL NEG     NEG     BCR/ABL NEG    
 [78] BCR/ABL BCR/ABL NEG     NEG     NEG     NEG     NEG    
 [85] NEG     NEG     NEG     NEG     NEG     NEG     NEG    
 [92] NEG     NEG     NEG     NEG     NEG     NEG     NEG    
 [99] NEG     NEG     NEG     NEG     NEG     NEG     NEG    
[106] NEG     NEG     NEG     NEG     NEG     NEG    
Levels: BCR/ABL NEG
> bcrabl$mol.biol <- factor(bcrabl$mol.biol)
> table(bcrabl$mol.biol)

BCR/ABL     NEG 
     37      74 

使用公式探索数据

公式符号一般是:lhs ~ rhs,左手边(left hand side, lhs)是因变量(也就是Y轴);右手边是自变量

例如探索不同细胞类型的病人年龄差异,那么自变量就是不同的细胞类型病人(因子型向量),因变量就是年龄(数值型向量)

boxplot(age ~ mol.biol, bcrabl)
之前一直没搞清楚这个,怎么画图怎么不对,后面才整明白

看上去这2组还是差异蛮明显的,那做个检验看看是否显著:

> t.test(age ~ mol.biol, bcrabl)

    Welch Two Sample t-test

data:  age by mol.biol
t = 4.8172, df = 68.529, p-value = 8.401e-06
alternative hypothesis: true difference in means is not equal to 0
95 percent confidence interval:
  7.13507 17.22408
sample estimates:
mean in group BCR/ABL     mean in group NEG 
             40.25000              28.07042 

p-value = 8.401e-06还是相当显著的。不过,箱线图展示的是:最小值、第一四分位数、中位数、第三四分位数与最大值,并没有平均数,其实可以自己加上去统计量还是参考前辈的代码:

library(ggplot2)
d <- data.frame(age=na.omit(bcrabl)$age, type=na.omit(bcrabl)$mol.biol)
head(d)
# 散点图
ggplot(d,aes(type,age,colour=type)) + geom_point()
# 箱线图(只有四分位数)
ggplot(d,aes(type,age,colour=type)) + geom_point() +
  geom_boxplot(aes(fill=type),colour='black',width=.2,
               position = position_nudge(x=-.2))
# 再添加其他统计值(如平均数和标准差)
# 附:这个符号%>% 可以用快捷键 shift+cmd+M
library(tidyverse)
ggplot(d,aes(type,age,colour=type)) + geom_point() +
  geom_boxplot(aes(fill=type),colour='black',width=.2,
               position = position_nudge(x=-.2))+
  geom_pointrange(data=function(d){
    group_by(d,type) %>% 
      summarize(mean=mean(age),sd=sd(age))
  }, aes(y=mean, ymin=mean-sd,ymax=mean+sd),
  position=position_nudge(x=.2),size=1.5)
美化后的图就比较赏心悦目了

先把自己画的丑图修一修,再来继续学习吧。

上一篇下一篇

猜你喜欢

热点阅读