好用的R小知识
学习资料来自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编辑器的功能也是很强大的,平时我都没有用到如下列表的功能
最常用到的只是第一个脚本功能,现在可以直接从网页上复制数据粘贴到写字板保存在当前目录下。 粘贴后的文本命名为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)
美化后的图就比较赏心悦目了
先把自己画的丑图修一修,再来继续学习吧。