R语言 | 论文基本表一步到位(一)
计数资料基本表
我们做临床研究,或者部分生信研究,第一个在论文中出现的表格就是基本表。基本表的作用是比较一下组间的基线,在确保基线齐的基础上,研究的问题才有可比性。
基本表的制作并不难,所用到的统计学知识都是最基础的。计数资料的比较用卡方检验,Fisher确切概率法;计量资料的比较采用T检验,方差分析。在SPSS软件中可以完成。但是如果数据多的话,没个半天时间也是搞不定![]()
想不想更快地完成呢?比如说10分钟?
从原始数据到基本表一步到位?
剩下的时间就可以追追剧约个会啦~![]()
咳咳,表演时刻到啦~
01 准备数据
如上图所示,整理好要制作基本表所需要的原始数据,每一列为一个变量。接下来,就开始切换到R studio中了,感受一下,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!="",]total<-dim(count_data)[1]locx<-regexpr(pattern = "\\(",text = characteristics[2:3,2])-1x<-as.numeric(substring(text = characteristics[2:3,2],1,locx))locy<-regexpr(pattern = "\\(",text = characteristics[2:3,3])-1y<-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} elseif(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)}char$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")
导出后的文件,稍作修改(改一下字体什么的),成果如下图所示:
最后需要交代一下代码中用到的具体的统计学方法:
首先计算样本数n和计算四格表中每个数字的期望值T
当n ≥40并且所有T ≥ 5,则用用卡方检验(非连续性校正);
当n≥40时,如果某个格子出现1<T <5,则需作卡方检验连续性校正;
当n<40,或任何格子出现T≤1,采用Fisher确切概率检验。
10分钟完成一天的作业,交完作业,剩下的时间自己看着办喽![]()
~
R语言 | 文献阅读 | 科普
欢迎扫码分享与关注
