R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制

2023-05-16

R语言|4. 轻松绘制临床基线表Table 1 regular table regular

欢迎关注公众号
第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析-2 ascp kingfisher数据下载ena (qq.com)icon-default.png?t=MBR7https://mp.weixin.qq.com/s?__biz=Mzg2NDcxMzYwNg==&mid=2247483760&idx=1&sn=dccdb31eba73a0f1330f5e78d1de1bf7&chksm=ce646f99f913e68feb1d69c137c8ebbac24d8b79f5f4c172556af5f7b34e2f36189aaffbd2b5&token=2005279620&lang=zh_CN#rd 2021-01-29 11:00

Table 1是总结研究样本中变量组成及变量间关系的一张表。

R语言可以通过几行代码快速生成Table 1。

本期用到的是“tableone”,是我制作Table 1时最喜欢用的包,今天分享给大家,觉得有用的小伙伴希望多加点赞转发支持。

目录

一.文献中的Tabl 1

二. tableone包制作Table 1(2列)

三. tableone包制作Table 1(4列)

四. tableone包制作Table 1(5列)

五. tableone其他代码展示

文献中的Table 1

图片来自:https://www.jianshu.com/p/3328fd0689f2

连续和分类变量相关性检验详见之前文章:

R语言|2. 连续变量相关性比较 和 R语言|3. 分类变量检验

1-1. 变量名+总人群(两列)

研究目的为“xx疾病的预后因素分析”时常用,即不涉及比较。

这种表只需把握好连续变量为正态还是非正态分布即可。正态分布写均值±标准差,非正态分布写中位数+上下四分位数。

分类变量写数目和百分数。

例:研究某类型乳腺癌的预后,所以Table 1两列

参考文献:Lewis GD,et al. Prognosis of lymphotropic invasive micropapillary breast carcinoma analyzed by using data from the National Cancer Database. Cancer Commun (Lond). 2019 Oct 21;39(1):60.

1-2:变量+某变量分列+p值


 

研究目的为 “xx变量对预后的比较分析” 时常用。

因涉及比较,所以在Table 1常将用该变量将全部人群分为几类,观察其他变量在这几个分类中是否有差异(p值)。

这种表就涉及到了连续变量和分类变量的相关性检验,这两种检验在R语言|2. 连续变量相关性比较 和 R语言|3. 分类变量检验已有介绍。

下面这篇文章的目的是研究两种病理类型的乳腺癌临床病理特点的比较。Table 1中作者总结了出这两个病理类型在肿瘤位置、组织分级等变量中有何差异

参考文献:Yu JI,et al. Differences in prognostic factors and patterns of failure between invasive micropapillary carcinoma and invasive ductal carcinoma of the breast: matched case-control study. Breast. 2010 Jun;19(3):231-7.

1-3. 变量名+总数+某变量分组+p值


 

1-1和1-2的综合。可以向读者展示更多细节。通常5列。

文章目的是两种病理类型的乳腺癌临床病理特点的比较。

参考文献:Hashmi AA, et al. Clinicopathologic features of invasive metaplastic and micropapillary breast carcinoma: comparison with invasive ductal carcinoma of breast. BMC Res Notes. 2018 Jul 31;11(1):531.

tableone包制作Table 1(2列)

以下数据来自SEER数据库的5000例乳腺癌病例,公众号回复:20210126获得

总结:过程其实就是输入3个条件【指定需要汇报的变量;指定这些变量中的分类变量;指定哪些连续变量是非正态分布】-----构建函数-----输出表格

1

 安装R包、数据放入工作目录

#1.加载R包,电脑里若无tableone,去掉下面的#install.packages("tableone")library(tableone)#2.清理运行环境rm(list = ls()) #3.读入数据aa<- read.csv('20210126.csv')

2

查看数据构成

 #4.查看数据前6行 head(aa)

源数据尽量用英文单词或缩写而非0.1.2.3.4代替。因软件默认识别为连续变量,需要转换,很麻烦。用英文在整理表格时也方便,省时省力。

 #5.查看数据数据性质str(aa)

数据有5000病例;16变量,2连续变量(年龄和时间);14分类变量及它们亚变量的个数和名字。

 #6.提取变量的名字 names(aa)

age=年龄,age70=以70岁为界分组的年龄,race=种族,marry=婚姻,t=t分期,n=n分期,tnm=tnm分期,er=雌激素受体,pr=孕激素受体,her2,g=组织分级,sur=手术,rt=放疗,che=化疗,status=死亡否,time=时间

3

连续变量正态性检验

 shapiro.test(aa$age)#p>0.05才符合正态分布 shapiro.test(aa$time)#p>0.05才符合正态分布

age和time SW检验p<0.05, 不符合正态性分布,Table1应汇报中位数+四分位数

前面的代码是只是查看数据性质,从第4步开始正式写Table 1代码。

4

输入Table 1的条件

#条件1# myVars的()中输入想要在Table 1出现的变量【英文引号以英文逗号隔开】

 myVars <- c("age","age70","race", "marry",               "t", "n",  "tnm", "er", "pr",                "g","her2", "sur","rt","che",                "time","status")#16个变量

#条件2# catVars的()内指明上述中哪些是分类变量

 catVars <- c("age70","race", "marry",               "t", "n",  "tnm", "er", "pr",               "g","her2", "sur","rt","che",                ,"status")#14个分类变量

#条件3# tableone包默认输出均数+标准差,所以nonvar的()输入那些连续变量是非正态分布的(输出中位数+四分位数)

nonvar <- c("time","age")  # 指定哪些变量是非正态分布变量

      

5

构建Table 函数

 table<- CreateTableOne(vars = myVars,       #条件1                        factorVars = catVars, #条件2                        data = aa,  #源数据                        addOverall = TRUE)  #增加overall列

6

输出结果

  table1 <- print(table,  #构建的table函数(包括条件1.2)                  showAllLevels=TRUE, #显示所有变量                  nonnormal = nonvar) #条件3

age和time均汇报为中位数+四分位数,分类变量均汇报为数目加百分数

7

保存至Excel

 write.csv(table1, file = "table1.csv")

tableone包制作Table 1(4列)

4列的Table 1其实就是在构建table 1时加入了一个变量分列条件而已。

需要注意的是此时应先验证连续变量和分类是哪种检验方法。

详见:R语言|2. 连续变量相关性比较 和R语言|3. 分类变量检验

前面操作1-4不变


 

library(tableone) #1.加载R包rm(list = ls()) #2.清理运行环境aa<- read.csv('20210126.csv') #3.读入数据head(aa)  #4.查看数据前6行str(aa)   #5.查看数据数据性质names(aa) #6.提取变量的名字

#条件1不变# myVars的()中输入想要在Table 1出现的变量

 myVars <- c("age","age70","race","marry",               "t","n", "tnm","er","pr",               "g","her2", "sur","rt","che",               "time","status") #16变量

#条件2不变# catVars的()内指明上述中哪些是分类变量

 catVars <- c("age70","race", "marry",               "t", "n",  "tnm", "er", "pr",               "g","her2", "sur","rt","che",                ,"status")

5

构建Table函数

#构建table 函数,加入条件4,strata = " " 。英文引号内填入需要分列的变量,例如本研究想探索放疗对预后的影响,则为strata = "rt"

table <- CreateTableOne(vars = myVars, #条件1                       factorVars = catVars,#条件2                       strata = "rt", #条件4                        data = aa, #原始数据                       );table

#条件3不变#. 指定非正态分布连续变量变量

 nonvar <- c("time","age") 

#条件5新加入# 假如有T<5变量应使用Fisher精确检验,本文数量大,无需Fisher精确检验

 exactvars <- c("a", "b")

#附加细节条件#:

catDigits = 2, contDigits = 3, pDigits = 4,修改连续变量小数位数为2位,分类变量百分比位数为3位,调整小数位数为4位;

6

输出结果

把构建的table+条件1-5+附加细节条件放入print()函数

table1<- print(table, #构建的table函数(带条件1.2.3)                 nonnormal = nonvar,#条件4                 #exact = exactvars,#条件5                 catDigits = 2,contDigits = 3,pDigits = 4, #附加条件
                 showAllLevels=TRUE, #显示所有变量                 quote = FALSE, # 不显示引号                 noSpaces = TRUE, # #删除用于对齐的空格                 printToggle = TRUE) #展示输出结果

7

保存为Excel

 write.csv(table1, file = "table1.csv")

tableone包制作Table 1(5列)

制作4列的所有条件不变(1-5+附加条件),在构建table函数时的代码增加一个addOverall = TRUE

5

构建Table函数

 table <- CreateTableOne(vars = myVars, #条件1                       factorVars = catVars,#条件2                      strata = "rt", #条件4                       data = aa, #原始数据                       addOverall = TRUE);table#条件6加入overall

6

输出Table 1(代码不变)

 table1<- print(table, #构建的table函数(带条件1.2.3)                  nonnormal = nonvar,#条件4                  #exact = exactvars,#条件5                  catDigits = 2,contDigits = 3,pDigits = 4, #附加条件
                  showAllLevels=TRUE, #显示所有变量                  quote = FALSE, # 不显示引号                  noSpaces = TRUE, # #删除用于对齐的空格                  printToggle = TRUE) #展示输出结果

函数CreateTableOne()所以细节条件汇总,即第5步。

5

构建Table函数

 table <- CreateTableOne(  vars, #指定哪些变量是Table 1需要汇总的变量  strata,#指定进行分类的变量,不写则只出Overall列  data,# 变量的数据集名称  factorVars,#指定哪些变量为分类变量,指定的变量应是vars参数中的变量  includeNA = FALSE,#为TRUE则将缺失值作为因子处理,仅对分类变量有效  test = TRUE,#默认为TRUE,当有2个或多个组时,自动进行组间比较  testApprox = chisq.test,#默认卡方检验  argsApprox = list(correct = TRUE),# 进行连续校正的chisq.test  testExact = fisher.test,#进行fisher精确检验  argsExact = list(workspace = 2 * 10^5),# 指定fisher.test分配的内存空间  testNormal = oneway.test, # 连续变量为正态分布进行的检验,默认为oneway.test,两组时相当于t检验  argsNormal = list(var.equal = TRUE), # 假设为等方差分析  testNonNormal = kruskal.test,# 默认为Kruskal-Wallis秩和检验  argsNonNormal = list(NULL),#传递给testNonNormal中指定的函数的参数的命名列表  smd = TRUE,#如果为TRUE(如默认值)并且有两个以上的组,则将计算所有成对比较的标准化均值差。  addOverall = FALSE#仅在分组时使用)将整个列添加到表中。Smd和p值计算仅使用分层的列阵进行。);table

#print()函数细节汇总,即第6步

6

输出Table 1

table1<- print(  x, #CreateTableOne()的 <- 前的名字(x=table)  catDigits = 1, #连续变量小数位1位  contDigits = 2,#分类变量保留2位  pDigits = 3,#p值保留3位  quote = FALSE,#默认值为FALSE。如果为TRUE                #,则包括行名和列名在内的所有内容都用引号引起来,以便您可以轻松地将其复制到Excel。  missing = FALSE,#是否显示丢失的数据信息  explain = TRUE,#显示百分比时是否在变量名称中添加解释,即(%)添加到变量名称中。  printToggle = TRUE,#如果为FALSE,则不输出  test = TRUE,#是否显示p值。默认为TRUE。  smd = FALSE,#是否显示标准化均值差异。默认为FALSE。如果存在多个对比,则显示所有可能的标准化均值差的平均值。  noSpaces = FALSE,#是否删除为对齐而添加的空格。  padColnames = FALSE,#是否用空格填充列名以居中对齐。默认值为FALSE。如果noSpaces = TRUE,则不进行  varLabels = FALSE,#是否用从labelled :: var_label()函数获得的变量标签替换变量名。  format = c("fp", "f", "p", "pf")[1],#默认值为“ fp”频率(百分比)。您也可以选择仅“ f”频率,“仅p”百分比和“ pf”百分比(频率)。  showAllLevels = FALSE,#是否显示所有级别。  cramVars = NULL,#字符向量,用于指定两个级别的分类变量,对于这两个级别的变量,应在一行中显示两个级别。  dropEqual = FALSE,#是否删除“ =第二级名称”描述,指示为两级分类变量显示哪个级别。  exact = NULL,#字符向量,用于指定p值应为精确测试值的变量。  nonnormal = NULL,#字符向量,用于指定p值应为非参数检验的变量的变量。  minMax = FALSE#对于非正态变量,是否使用[min,max]而不是[p25,p75]。默认值为FALSE。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制 的相关文章

  • MySQL学习(6)SHOW,USER

    1 SELECT USER 获得当前登陆用户的用户名与主机信息 使用该命令会显示类似于如下信息 root zxj lest vicp cc 前面是用户名 后面是主机名 2 SHOW用法 SHOW DATABASES 显示多少个数据库 也可以
  • 多表可更新视图的实现

    多表关联后的数据能保证主键唯一的视图是可直接做更新 不需要用触发器实现 多表视图的定义 当视图的数据源只有一张数据表 则该视图为单表视图 当视图的数据源是多张数据表 则该视图为多表视图 可更新视图的定义 在绝大多数人的概念中 视图是只读的
  • sybase :数据库不能打开的解决办法(状态装载或可疑)

    平台资料 操作系统平台 Windows 2000 5 00 2195 Service Pack 4 数据库平台 Sysbase 12 5 server db jc database db text db jd db jh db app 现象
  • 理解inode

    inode是一个重要概念 是理解Unix Linux文件系统和硬盘储存的基础 我觉得 理解inode 不仅有助于提高系统操作水平 还有助于体会Unix设计哲学 即如何把底层的复杂性抽象成一个简单概念 从而大大简化用户接口 下面就是我的ino
  • hive中的复杂类型使用

    在Hive 中如何使用符合数据结构 maps array structs 1 Array的使用 创建数据库表 以array作为数据类型 create table person name string work locations array
  • mysql的一些操作

    修改mysql的字符集 在安装mysql5 0时可以设置好mysql的字符集 一般使用utf8的字符集 1 查看建立表 tablename 的sql语句 Show create table tablename 查看建立表 tablename
  • [SQL]经典的sql语句

    一 基础 1 说明 创建数据库 CREATE DATABASE database name 2 说明 删除数据库 drop database dbname 3 说明 备份sql server 创建 备份数据的 device USE mast
  • 51单片机学习笔记(二) 单个数码管显示1到9

    转自我的博客 http sincos in p 20 数码管 其实就是8个发光二极管按顺序排列而成的 所以让数码管显示特定的数字 只需要将该亮的二极管点亮 不该亮的灭了就好了 为了达到这个目的 就得参考电路图了 51HEI开发板的电路图在我
  • Oracle中没有 if exists(...)

    对于Oracle中没有 if exists 的语法 目前有许多种解决方法 这里先分析常用的三种 推荐使用最后一种 第一种是最常用的 判断count 的值是否为零 如下 declare v cnt number begin select co
  • table中嵌套多层table

    因工作业务需求 需要展示一个多层嵌套的数据结构 现整理如下 分享给需要的朋友 应用框架vue2 初始的数据结构如下 new Vue el table1 data table1 order ex 20171006 table2 kind 苹果
  • element-ui表格组件el-table实现行编辑与新增功能

    element前端ui组件挺美观的 我们也使用了他们的table组件 但是默认没有提供行编辑功能 我们可以通过将table的每个单元格换成input框来巧妙实现 默认每个单元格就是一个template数据填充 不可编辑 我们可以在templ
  • 存储过程进行数据合并导入

    CREATE PROCEDURE sp mytest1 mytype int AS declare pro varchar 50 declare pro1 varchar 50 select pro typename from table1
  • oracle表连接深入浅出

    author skate time 2010 08 20 表的连接 表的连接是指在一个SQL语句中通过表与表之间的关联 从一个或多个表检索出相关的数据 如果一个SQL语句的关联表超过两个 那么连接的顺序如何呢 ORACLE首先连接其中的两个
  • 什么是CRUD( What is CRUD)?

    在很多技术性的文章 特别是有关数据库类的文章中 经常会看到一个缩写 CRUD 那什么是CRUD呢 CRUD其实是数据库基本操作中的Create 创建 ReadRetrieve 读取 Update 更新 Delete 删除 而这里的Creat
  • Oracle中的锁

    Oracle数据库支持多个用户同时与数据库进行交互 每个用户都可以同时运行自己的事务 从而也需要对并发访问进行控制 Oracle也是用 锁 的机制来防止各个事务之间的相互影响 对并发访问进行控制的 保证数据的一致性和完整性 当一个事务或操作
  • 测试alter table shrink space compact cascade及学习user_tables相关列的含义

    SQL gt alter table test shrink enable row movement alter table shrink space须开启行移动 Table altered SQL gt select table name
  • antd 中 Table表格 合并行

    1 首先获取所要合并行的column 去除每一行数据的rowkey 本例取的是Name这一列 2 当Name的值在多个页面出现时需重新记录rowSpan 3 合并column中具有相同Name的行 结果图如下 表格数据 const Data
  • 512色色谱图

    代码如下
  • oracle索引监控

    oracle索引是加快查询速度 减少i o操作的 但是如果索引无用的话那他就是浪费资源的 尤其是在做DML操作时 这是 就需要我们查看那些索引是无用的 相关视图 user indexesuser ind columnsv object us
  • 15款提高表格操作的jQuery插件

    table表格由于它的浏览器兼容性和复杂的标签嵌套方式 可以算是添加样式最困难的对象之一了 大多数前端er都把网页中的table标签替换为div 主要就是因为div要比table更容易添加CSS样式 但是我们在日常应用中仍然要用到table

随机推荐

  • 全局函数重载operator++

    span class token keyword class span span class token class name Person span span class token punctuation span span class
  • ChatGPT万字长文理解透彻分布式事务

    分布式事务是指在分布式环境下 xff0c 对多个数据资源进行并行操作时 xff0c 需要保持数据资源之间的一致性和完整性 xff0c 同时具有ACID的特性 在分布式系统中 xff0c 由于存在多个数据存储节点 网络延迟 可用性等问题 xf
  • 使用AUR下载并安装常用程序

    提示 xff1a 文章如有不当之处可联系本人修该或删除 文章目录 前言一 AUR是什么 xff1f 二 使用步骤1 安装AUR2 安装AUR软件方法13 安装AUR软件方法24 卸载AUR包5 更新 升级AUR软件包6 安装AUR 总结 前
  • Java基础——Arrays类

    每日正能量 如果你要做一件事 xff0c 不要到处宣言自己的想法 xff0c 只管安安静静地去做 xff0c 值不值 xff0c 时间是最好的证明 xff0c 自己的人生 xff0c 得自己负责 Arrays类 JDK中提供了一个专门用于操
  • Java进阶——JSON格式了解

    文章目录 一 JSON 是什么二 JSON 的语法规则三 JSON 和 XML的比较四 JSON的解析和生成 xff08 JSON 和 JS 对象互转 xff09 五 JSON格式规定5 1 对象 xff08 0bject 5 2 数组 x
  • linux 终端美化教程

    linux 配置 ohmyzsh 文章目录 linux 配置 ohmyzsh 安装 ZSH 安装 Oh My Zsh 每次登录打开就是这样的 修改主题设置 主题预览 更新 zshrc 历史命令智能提示插件 zsh autosuggestio
  • 操作系统学习一(生产者与消费者问题)

    在Linux环境下模拟生产者消费者问题 实验前知识准备源代码 实验前知识准备 1 生产者消费者问题是一个著名的进程同步问题 xff0c 本次实验中 xff0c 用线程代替进程 源代码 span class token macro prope
  • SpringMVC 的配置

    1 引入依赖 lt dependency gt lt groupId gt org springframework lt groupId gt lt artifactId gt spring webmvc lt artifactId gt
  • 深度学习基础之优化器(optimizer)的介绍

    文章目录 前言SGD 随机梯度下降法 xff09 MomentumAdaGradRMSpropAdamMNIST手写数据集四种方法对比总结参考 前言 神经网络的学习的目的是找到使损失函数的值尽可能小的参数 这是寻找最优参数的问题 xff0c
  • 实现登录注册页面详细(Servlet+jsp+java)

    登录和注册实现 1 基本需要1 1 工程依赖1 2 注册 登录 首页界面 xff08 jsp xff09 1 3 创建数据库1 4 部署Tomcat1 5 项目层次结构 2 实现注册和登录2 1 所需工具类2 2 dao层2 3 Servi
  • ()、[]、{}、(())、[[]]等各种括号的使用

    欢迎关注微信 xff1a 生信小博士 1 小括号 圆括号 xff08 xff09 1 1 单小括号 命令组 括号中的命令将会新开一个子shell顺序执行 xff0c 所以括号中的变量不能够被脚本余下的部分使用 括号中多个命令之间用分号隔开
  • FastQC原始安装

    1 下载fastqc wget http www bioinformatics babraham ac uk projects fastqc fastqc v0 11 5 zip 2 解压 unzip fastqc v0 11 5 zip
  • 深入理解Elasticsearch倒排索引

    通过阅读本文你可以获得什么 1 了解倒排索引的基本概念 倒排索引是什么 xff1f 倒排索引的优势和特点是什么 xff1f 倒排索引与正排索引的区别是什么 xff1f 2 熟悉倒排索引的应用场景 搜索引擎中如何应用倒排索引 xff1f 倒排
  • r语言中六种方法查看R函数源代码—— 鼠标放在函数上,按下F2

    欢迎关注微信 xff1a 生信小博士 加油 1 最直接的方法当然是直接键入函数 不加括号 xff0c 大部分函数源代码就可以直接显现出来 我以PerformanceAnalytics包中的函数chart Correlation 为例 2 在
  • 空间转录组学(Spatial Transcriptomics)

    01 空间转录组技术的发展 近年来单细胞转录组测序技术的应用大大拓宽了人们的视野 xff0c 使人们能够深入了解组织中细胞的构成的多样性和基因表达状态 众所周知 xff0c 基因表达具有时间和空间的特异性 xff0c 通过对不同时间点的样本
  • 修改R语言安装包的默认路径 r包安装位置

    修改R语言安装包的默认路径 r包安装位置 一次性 xff08 每次都需要设置 xff09 xff1a 运行命令 xff1a libPaths 查看已经安装的r包位置 libPaths 34 yourpath 34 设置新的r包位置 或者 i
  • 如何在ubuntu系统安装libboost-dev) and openmp libraries libboost-dev libomp-dev

    https blog csdn net qq 41854911 article details 119454212 You need to have boost e g sudo apt get install libboost dev a
  • Docker删除容器命令

    更多优质内容欢迎看看我的号 xff1a 生信小博士 删除容器 之前要先docker stop 容器 span class token number 1 span 删除指定容器 docker rm span class token opera
  • 生存分析原理简明教程 单因素生存分析 Kaplan-Meier、LogRank 只能针对单一的变量进行 多因素cox回归分析

    一 生存分析 狭义上来说 xff0c 生存分析用来分析病人的生存和死亡情况 广义上讲的是事件是否发生 在这里就用是否死亡来代替 一般来说 xff0c 生存的数据一般有两个变量 xff0c 一个事件是否发生 xff0c 病人是否死亡 xff0
  • R语言|4. 轻松绘制临床基线表Table 1 临床三线表绘制

    R语言 4 轻松绘制临床基线表Table 1 regular table regular 欢迎关注公众号 第四次考核 Jimmy 学徒考核 Linux安装软件 rnaseq上游分析 2 ascp kingfisher数据下载ena qq c