R生成三线表

news2024/11/25 16:31:22

R生成三线表

  • table1包
      • 测试数据生成
      • 制作三线表
  • Tableone包
      • 加载包 探索数据类型
      • 数据整理分类
      • 构建Table函数
      • Tableone函数细节

主要基于table1 或tableone 包

table1包

测试数据生成

data=data.frame(
  性别=sample(c("男","女"), 1000,replace=T),
  年龄=round(rnorm(1000,50, 15)),
  民族= sample(c("汉族","壮族","其他"),1000,replace=T),
  身高= round(rnorm(1000,170, 5)),
  体重= round(rnorm(1000,75, 5)),
  收缩压= round(rnorm(1000,130, 15)),
  舒张压= round(rnorm(1000,90, 5)),
  身体状况= sample(c("优","中","差"), 1000,replace=T),
  高血压= sample(c("是","否"), 1000,replace=T),
  吸烟= sample(c("是","否"), 1000,replace=T),
  喝酒= sample(c("是","否"), 1000,replace=T)
)
head(data)

#运行内容
  性别 年龄 民族 身高 体重 收缩压 舒张压 身体状况 高血压 吸烟 喝酒
165 壮族  176   67    149     82       差     否   否   否
284 其他  177   73    137     92       差     是   是   是
375 其他  168   82    111     90       优     是   是   否
467 其他  171   76    152     93       差     是   是   否
567 壮族  172   73    118     83       优     否   否   是
644 壮族  168   82    141     83       优     是   否   是

制作三线表

基本三线表, 分类变量默认以 例数(占比%),连续变量以均数(标准差)或者中位数[最小、最大]表示

pacman::p_load(table1) #加载table1包

# ~ 后面接需要统计描述的列,| 表示分组
# 按是否患有高血压分组统计 性别、年龄、民族、身高情况
table1(~性别+年龄+民族+身高|高血压,data = data)

在这里插入图片描述

考虑统计检验(卡方检验、t检验)

#———————————————————————————————————————————— 定义检验函数
# 这两个主要是实现卡方检验和t检验,若是需要用到非参数检验、方差分析需要自己定义
pvalue <- function(x, ...) {
  y <- unlist(x)
  g <- factor(rep(1:length(x), times=sapply(x, length)))

  if (is.numeric(y)) {
    # 数值型数据用t-test(两组比较)
    p <- t.test(y ~ g)$p.value                          
     } else {
    # 因子型数据用卡方
    p <- chisq.test(xtabs(~y+ g))$p.value                
     }
  c("", sub("<", "&lt;", format.pval(p, digits=3, eps=0.001)))
  
}

statistic <- function(x, ...) {
  y <- unlist(x)
  g <- factor(rep(1:length(x), times=sapply(x, length)))

  if (is.numeric(y)) {
   
   statistic <- t.test(y ~ g)$statistic
  } else {
   
  statistic <- chisq.test(xtabs(~y+ g))$statistic
      }
  c("",round(statistic,3))
}

#———————————————————————————————————————————— 三线表
# 输出带有统计检验的三线表
# 分别比较是否患有高血压两组之间所有特征的差异~
table1(~.|高血压,data = data, extra.col=list( 'statistic'=statistic,'P-value'=pvalue), overall=F)

在这里插入图片描述
table1输出的结果格式是html格式的,可用浏览器打开,然后复制到word或者excel中。也直接导出保存为csv格式,导出时格式可能略微有点不同。

out=table1(~.|高血压,data = data, extra.col=list( 'statistic'=statistic,'P-value'=pvalue), overall=F)
write.csv(out, "d:/out.csv",row.names = F)

Tableone包

加载包 探索数据类型

pacman::p_load(tableone)#1.加载R包
rm(list = ls()) #2.清理运行环境
str(data)   #3.查看数据数据性质
names(data) #4.提取变量的名字

#运行内容
'data.frame':	1000 obs. of  11 variables:
 $ 性别    : chr  "女" "女" "男" "男" ...
 $ 年龄    : num  65 84 75 67 67 44 50 64 44 47 ...
 $ 民族    : chr  "壮族" "其他" "其他" "其他" ...
 $ 身高    : num  176 177 168 171 172 168 169 165 164 163 ...
 $ 体重    : num  67 73 82 76 73 82 82 79 69 83 ...
 $ 收缩压  : num  149 137 111 152 118 141 131 118 123 135 ...
 $ 舒张压  : num  82 92 90 93 83 83 90 91 91 91 ...
 $ 身体状况: chr  "差" "差" "优" "差" ...
 $ 高血压  : chr  "否" "是" "是" "是" ...
 $ 吸烟    : chr  "否" "是" "是" "是" ...
 $ 喝酒    : chr  "否" "是" "否" "否" ...
 > names(data) #4.提取变量的名字
 [1] "性别"     "年龄"     "民族"     "身高"     "体重"     "收缩压"   "舒张压"   "身体状况" "高血压"   "吸烟"     "喝酒" 

数据整理分类

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

myVars <- c("性别","年龄","民族","身高", 
            "体重","收缩压", "舒张压","身体状况","高血压", 
            "吸烟","喝酒") 

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

catVars <- c("性别","民族","身体状况","高血压", 
              "吸烟","喝酒") 

指定非正态分布连续变量变量

 nonvar <- c("收缩压","舒张压")  #此为举例

假如有T<5变量应使用Fisher精确检验,本文数量大,无需Fisher精确检验

 exactvars <- c("a", "b")  #此为举例

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

构建Table函数

 table <- CreateTableOne(vars = myVars, #条件1
                       factorVars = catVars,#条件2
                       strata = "高血压", #条件4 用于分为两个类别
                        data = data, #原始数据
                     addOverall = TRUE  );table#条件6加入overall
  
 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) #展示输出结果  
                 
 write.csv(table1, "E:/Rworkplace//table1.csv",row.names = F)                   

Tableone函数细节

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

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。
)

相比之下 table1包输出的html格式的表格更为简洁 好看

参考两篇公众号文章:
1.你的时间应该用在更重要的事情上–table1
2.R语言|4. 轻松绘制临床基线表Table 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13785.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2021年认证杯SPSSPRO杯数学建模A题(第一阶段)医学图像的配准全过程文档及程序

2021年认证杯SPSSPRO杯数学建模 A题 医学图像的配准 原题再现&#xff1a; 图像的配准是图像处理领域中的一个典型问题和技术难点&#xff0c;其目的在于比较或融合同一对象在不同条件下获取的图像。例如为了更好地综合多种信息来辨识不同组织或病变&#xff0c;医生可能使用…

5年自动化测试,终于进字节跳动了,年薪30w其实也并非触不可及

一些碎碎念 什么都做了&#xff0c;和什么都没做其实是一样的&#xff0c;走出“瞎忙活”的安乐窝&#xff0c;才是避开弯路的最佳路径。希望我的经历能帮助到有需要的朋友。 在测试行业已经混了5个年头了&#xff0c;以前经常听到开发对我说&#xff0c;天天的点点点有意思没…

java计算机毕业设计springboot+vue+elementUI永加乡精准扶贫信息管理系统

项目介绍 系统设计的主要意义在于&#xff0c;一方面&#xff0c;对于网站来讲&#xff0c;系统上线后可以带来很大的便利性&#xff0c;精准扶贫网站管理属于非常细致的管理模式&#xff0c;要求数据量大&#xff0c;计算机管理可以提高精确性&#xff0c;更为便利的就是信息…

NF-κB 信号通路调节细胞因子转录

NF-κB 大家族哺乳动物 NF-κB 家族由五种成员组成&#xff1a;RelA/p65、c-Rel、RelB、p50 (NF-κB1) 和 p52 (NF-κB2)&#xff0c;它们可以形成各种异源二聚体或者同源二聚体 (如常见 p50/RelA 异源二聚体)&#xff0c;并通过与启动子的 κB 位点结合来激活大量基因。所有 N…

Mysql常用函数

Mysql常用函数 字段拼接(concat) CONCAT() 函数用于将多个字符串连接成一个字符串 格式&#xff1a; select CONCAT(str1,str2,…) from table_name; #查询商品表&#xff0c;返回一列&#xff1a;商品名称&#xff08;价格&#xff09;。 SELECT concat(prod_name,(,prod…

【论文阅读】Weakly Supervised Semantic Segmentation using Out-of-Distribution Data

一篇弱监督分割领域的论文&#xff0c;发表在CVPR2022上&#xff1a; 论文标题&#xff1a; Weakly Supervised Semantic Segmentation using Out-of-Distribution Data 作者信息&#xff1a; 代码地址&#xff1a; https://github.com/naver-ai/w-ood Abstract 作者认为…

专精特新小巨人的申报条件

专精特新企业分为市级专精特新、省级专精特新和国家级专精特新。 在2018年&#xff0c;开展了国家第一批专精特新“小巨人” 企业申报工作。为了引导中小企业积极走“专精特新”发展之路&#xff0c;加快新旧动能转 换步伐&#xff0c;提升自主创新能力、加快转型升级&#xf…

软考的网络工程师对就业有用吗?

考证只是一个结果&#xff0c;学会技能才是最重要的。 视工作而言&#xff0c;软考中级网络工程师的性价比还是非常高的&#xff0c;对于从事同类的技术人员&#xff0c;基础扎实一般可以裸考通过。 含金量嘛&#xff0c;计算机专业可以以考代凭&#xff0c;毕竟证书是人社部和…

安装谷歌服务框架2022最新版本22.45.15失败

在这里(谷歌play服务框架下载安装安卓版-谷歌服务框架2022最新版本(Google Play 服务)下载22.45.15官方手机版-蜻蜓手游网 (qt6.com)http://www.qt6.com/XiaZai/155507.html)下载了谷歌服务框架(Google Play 服务)&#xff0c;其应用信息为&#xff1a; 包名&#xff1a;com.g…

Mutated 源代码解析 client (一)

Mutated , a C project https://github.com/scslab/mutated usage Main function in the client directory, mutated_synthetic.cc Line 14 parse the user arguments, such as “-h, -w, -c” parse_synthetic is implemented in client\opts_synthetic.cc Here, use th…

Dive into TensorFlow系列(3)- 揭开Tensor的神秘面纱

TensorFlow计算图是由op和tensor组成&#xff0c;那么tensor一般都用来代表什么呢&#xff1f;显然&#xff0c;像模型的输入数据、网络权重、输入数据经op处理后的输出结果都需要用张量或特殊张量进行表达。既然tensor在TensorFlow体系架构中如此重要&#xff0c;因此本文将带…

Redis通用命令和key的层级结构

目录 1 Redis数据结构介绍 2 Redis 通用命令 3 Redis命令-Key的层级结构 1 Redis数据结构介绍 Redis是一个key-value的数据库&#xff0c;key一般是String类型&#xff0c;不过value的类型多种多样&#xff1a; value的数据类型共有8种&#xff0c;前面5中为基本数据类型&a…

5000立方米球罐设计

目 录 摘 要 I Abstract II 1 文献综述 1 1.1 课题研究的工程背景及理论、实际意义 1 1.2 球罐用钢 1 1.2.1 球罐用钢基本要求分析 1 1.2.2 国内外球罐的常用钢种 2 1.2.3 几种典型球罐用钢的优劣对比 2 1.3 球罐设计 3 1.3.1 球罐设计的执行标准及法规 3 1.3.2 球壳结构 4 1.3…

通过PLC网关如何实现三菱FX3U的远程上下载程序?

FX3U是三菱推出的高性能PLC品牌。基本性能大幅提升&#xff0c;晶体管输出型的基本单元内置了3轴独立最高100kHz的定位功能&#xff0c;并且增加了新的定位指令&#xff0c;从而使得定位控制功能更加强大&#xff0c;使用更为方便&#xff0c;受到企业的青睐。因此&#xff0c;…

PyQt5 QLabel标签

PyQt5 QLabel标签标签显示标签快捷键功能标签显示 QLabel背景色设置&#xff1a; palette QPalette() # 创建调色板 palette.setColor(QPalette.Window, Qt.green) # 设置调色板属性 label.setPalette(palette) # 标签设置Palette label.setAutoFillBackground(True) # 设为T…

【安全测试学习】数据库基础

以上来自学习极客时间《Web 安全攻防实战》课程内容&#xff0c;汇总整理思维导图。

记录多次安装mysql失败问题

首先说明一下&#xff0c;本人电脑已经安装过mysql&#xff0c;不过想从5.7版本升级到8.0 首先是卸载电脑上的mysql5.7版本&#xff0c;卸载过程如下&#xff1a; 进入控制面板&#xff0c;直接卸载所有mysql相关进入安装目录下删除mysql相关文件夹&#xff0c;通常在C:\Prog…

”互联网行业还在等金三银四或是金九银十?“,我劝你还是早做打算

对于今年的IT行业来说&#xff0c;可能真的根本没有所谓的“金三银四”或是“金九银十”。各大招聘网站或者软件上不管是大厂还是中小公司看似挂个招聘需求&#xff0c;但实际上这些公司并不非常缺人也不急着招人&#xff1b;我想今年程序员听的最多的一个词就是”互联网寒冬“…

二十九、Java 数据结构

Java 数据结构 Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类&#xff1a; 枚举&#xff08;Enumeration&#xff09;位集合&#xff08;BitSet&#xff09;向量&#xff08;Vector&#xff09;栈&#xff08;Stack&#xff09;字典&#xff…

谈谈制定数据治理战略路线图的方法

对于商业世界最具前瞻性思维能力的发展来说,如数据分析、机器学习和人工智能,高质量的数据是一个关键的成功因素。因此,当涉及到数字化转型时,数据发挥着至关重要的作用。 然而,如果没有适当的数据治理,组织最终可能会构建腐败的模型,做出低效的决策,甚至违反法律。商…