vlambda博客
学习文章列表

R语言 | 论文基本表一步到位(一)

R语言 | 论文基本表一步到位(一)

计数资料基本表

R语言 | 论文基本表一步到位(一)
R语言 | 论文基本表一步到位(一)
_
_
_
_

我们做临床研究,或者部分生信研究,第一个在论文中出现的表格就是基本表。基本表的作用是比较一下组间的基线,在确保基线齐的基础上,研究的问题才有可比性。

基本表的制作并不难,所用到的统计学知识都是最基础的。计数资料的比较用卡方检验,Fisher确切概率法;计量资料的比较采用T检验,方差分析。在SPSS软件中可以完成。但是如果数据多的话,没个半天时间也是搞不定R语言 | 论文基本表一步到位(一)

想不想更快地完成呢?比如说10分钟?R语言 | 论文基本表一步到位(一)从原始数据到基本表一步到位?R语言 | 论文基本表一步到位(一)剩下的时间就可以追追剧约个会啦~R语言 | 论文基本表一步到位(一)

咳咳,表演时刻到啦~

_
_
_
_
_

01 准备数据 

_
R语言 | 论文基本表一步到位(一)
_
_
_
_

如上图所示,整理好要制作基本表所需要的原始数据,每一列为一个变量。接下来,就开始切换到R studio中了,感受一下,R语言做作业的速度吧R语言 | 论文基本表一步到位(一)

_
_
_
_
_

02 制作基本表(计数资料) 

_

No.1

准备工作



####准备工作####rm(list = ls())setwd("C:\\Users\\lifengwei\\Desktop\\123")####读入文件data<-read.table(file = "TCGA_LIHC_clinical.txt",header = T,row.names = 1,sep = "\t",comment.char = "")
_
_
_
_

No.2

数据分组


_
_
_
_
##数据分组:计量资料和计数资料Num<-NULLfor (i in 1:length(data)) { a<-class(data[,i]) Num[i]<-a}count_data<-data[,Num=="factor"]##计量资料measurement_data<-data[,Num!="factor"]##计数资料
_
_
_
_

No.3

计算每组的频数的比例


_
_
_
_
####计数资料的基本表(按照性别分为两组)####count_data_M<-count_data[count_data$gender=="MALE",]count_data_F<-count_data[count_data$gender=="FEMALE",]
Freq_CM<-lapply(X = count_data_M,FUN = table)Prop_CM<-lapply(X = Freq_CM,FUN = prop.table)
Freq_CF<-lapply(X = count_data_F,FUN = table)Prop_CF<-lapply(X = Freq_CF,FUN = prop.table)
_
_
_
_

No.4

基本表制作


_
_
_
_
####建表char<-NULLfor (i in 1:dim(count_data)[2]) { character<-c(names(Freq_CM[i]),names(Freq_CM[[i]])) Noc_CM<-c(NA,paste0(Freq_CM[[i]],"(",round(Prop_CM[[i]],4)*100,"%)")) Noc_CF<-c(NA,paste0(Freq_CF[[i]],"(",round(Prop_CF[[i]],4)*100,"%)"))

characteristics<-data.frame("characteristics"= character,"Male" = Noc_CM,"Female" = Noc_CF)

##删除缺失值所形成的行 characteristics<-characteristics[characteristics$characteristics!="",]

##进行统计的总数n total<-dim(count_data)[1]

##截取期望值的最小值 locx<-regexpr(pattern = "\\(",text = characteristics[2:3,2])-1 x<-as.numeric(substring(text = characteristics[2:3,2],1,locx))

locy<-regexpr(pattern = "\\(",text = characteristics[2:3,3])-1 y<-as.numeric(substring(text = characteristics[2:3,3],1,locy))

df<-data.frame("x" = x,"y" = y) chi<-chisq.test(x = df) expected_min<-min(chi$expected)

##选择合适的统计学方法 if(total>=40&expected_min>=5){ p<-chisq.test(df,correct = F)$p.value} else if(total>=40&expected_min<5&expected_min>1){ p<-chisq.test(df,correct = T)$p.value} else{ p<-fisher.test(df,simulate.p.value = F)$p.value }

characteristics$P_value<-c(round(p,4),rep(NA, dim(characteristics)[1]-1)) char<-rbind(char,characteristics)}

##删除NAchar$characteristics<-as.character(char$characteristics)char$Male<-as.character(char$Male)char$Female<-as.character(char$Female)char[is.na(char)] <- " "

##导出write.table(x = char,file = "characteristics_count.txt",sep = "\t")
_
_
_
_
_
_
_
_

导出后的文件,稍作修改(改一下字体什么的),成果如下图所示:

_
_
_
_
R语言 | 论文基本表一步到位(一)
_
_
_
_

最后需要交代一下代码中用到的具体的统计学方法:

首先计算样本数n和计算四格表中每个数字的期望值T

  • 当n ≥40并且所有T ≥ 5,则用用卡方检验(非连续性校正);

  • 当n≥40时,如果某个格子出现1<T <5,则需作卡方检验连续性校正;

  • 当n<40,或任何格子出现T≤1,采用Fisher确切概率检验。


10分钟完成一天的作业,交完作业,剩下的时间自己看着办喽R语言 | 论文基本表一步到位(一)R语言 | 论文基本表一步到位(一)~

_
_
_
_
_

R语言 | 文献阅读 | 科普

欢迎扫码分享与关注

_