一条龙-T检验+绘制boxplot

1.输入文件:
在这里插入图片描述

2.代码

#title:boxplot-5utr-cds-3tr-ATCG的百分比分布和T检验_封装函数版
rm(list=ls(all=TRUE))
setwd("E:/R/Rscripts/5UTR_ABD_TE")
library(tidyverse)
library(ggplot2)
# library(RColorBrewer)
library(patchwork)
library(dplyr)
library(tidyr)
library(openxlsx)
library(stringr)
dfutr5<- read.table(file="lijinonextended_5utr_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)
dfcds<- read.table("lijinonextended_cds_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)
dfutr3<- read.table("lijinonextended_3utr_ATCG.fasta",na.strings = "#N/A",sep="\t",header = TRUE)reshape_data_frame <- function(df, id_column = NULL) {# 如果指定了ID列,则保留ID列,否则只处理核苷酸列if (!is.null(id_column)) {df_long <- df %>%pivot_longer(cols = c(A, T, C, G),names_to = "nucleotide",values_to = "percentage",id_cols = id_column  # 保留ID列)} else {df_long <- df %>%select(-Sequence_ID) %>%pivot_longer(cols = c(A, T, C, G),names_to = "nucleotide",values_to = "percentage")}return(df_long)
}# 调用函数,转换数据框,假设我们想保留Id列
# reshaped_df <- reshape_data_frame(df, id_column = "Id")
# print(reshaped_df)# 如果不想保留Id列
dfutr5longer<- reshape_data_frame(dfutr5) %>% mutate(percentage1=percentage/100)
dfcdslonger<- reshape_data_frame(dfcds)%>% mutate(percentage1=percentage/100)
dfutr3longer<- reshape_data_frame(dfutr3)%>% mutate(percentage1=percentage/100)##############################################
#######定义函数用于T检验
##############################################perform_all_combinations_T_test <- function(df, group_column, score_column, df_name) {# 获取所有唯一的组unique_groups <- unique(df[[group_column]])# 生成所有可能的两两组合combinations <- combn(unique_groups, 2, simplify = FALSE)# 初始化一个空的数据框来存储结果results_df <- data.frame(Comparison = character(), Mean1 = numeric(), Mean2 = numeric(), Pvalue = numeric(), stringsAsFactors = FALSE)# 遍历每一对组合进行T检验for(combination in combinations) {group1 <- combination[1]group2 <- combination[2]# 提取两个组的指定Score值scores_group1 <- df[[score_column]][df[[group_column]] == group1]scores_group2 <- df[[score_column]][df[[group_column]] == group2]# 确保scores_group1和scores_group2不为空并且都是数值型if (length(scores_group1) > 0 && length(scores_group2) > 0 && all(is.numeric(scores_group1)) && all(is.numeric(scores_group2))) {# 进行T检验t_test_result <- t.test(scores_group1, scores_group2)# 计算两个组的均值mean_group1 <- mean(scores_group1, na.rm = TRUE)mean_group2 <- mean(scores_group2, na.rm = TRUE)# 向结果数据框添加一行comparison_value <- paste(df_name, group1, "_Vs_", df_name, group2, sep="")new_row <- data.frame(Comparison = comparison_value,Mean1 = mean_group1, Mean2 = mean_group2, Pvalue = t_test_result$p.value, stringsAsFactors = FALSE)results_df <- rbind(results_df, new_row)}}return(results_df)
}# 调用函数的例子:
result5utr <- perform_all_combinations_T_test(dfutr5longer, "nucleotide", "percentage1", "5utr")
resultcds <- perform_all_combinations_T_test(dfcdslonger, "nucleotide", "percentage1", "cds")
result3utr <- perform_all_combinations_T_test(dfutr3longer, "nucleotide", "percentage1", "3utr")# # 正确的调用方法
# t.test_result <- t.test(
#   dfutr5longer$percentage1[dfutr5longer$nucleotide == "A"],
#   dfutr5longer$percentage1[dfutr5longer$nucleotide == "T"]
# )
# 
# # 打印测试结果
# print(t.test_result)###########################################################################
##绘制boxplot-自定义函数
##########################################################################
library(tidyverse)
library(ggplot2)
library(patchwork)# 更新函数定义以包括x轴标题作为参数
create_grouped_boxplot <- function(data, group_var, score_var, x_label = "5'UTR",y_label = "Score", y_limits = c(0, 100), y_breaks = seq(0, 100, 20), fill_values = c("#c59d94", "#afc7e8", "#dbdb8d", "#ff9896")) {data[[group_var]] <- factor(data[[group_var]], levels = c("A", "T", "C", "G"), labels = c("A", "U", "C", "G"), ordered = TRUE)p <-  ggplot(data, aes(x = .data[[group_var]], y = .data[[score_var]], fill = .data[[group_var]])) +# geom_violin(trim=FALSE,color="white") + geom_errorbar(width = 0.1,size = 0.35,position = position_dodge(0.9),stat = "boxplot") +geom_boxplot(outlier.size = -1,width = 0.25,position = position_dodge(0.9),fatten = 1.2,size = 0.5) +theme_classic() +labs(y = y_label, x = x_label) +scale_y_continuous(limits = y_limits, breaks = y_breaks) +theme(strip.background = element_rect(colour = "black", fill = "#FFFFFF"),plot.title = element_text(hjust = 0.5, vjust = 1, lineheight = 1, color = "black"),panel.background = element_rect(fill = "white", colour = "black", linewidth  = 0.5),axis.title.y = element_text(size = 15, face = "bold", color = "black"),axis.title.x = element_text(size = 15, face = "bold", color = "black", vjust = 0.5, hjust = 0.5, margin = margin(t = 12)),axis.text = element_text(size = 13, face = "bold", color = "black")) +scale_fill_manual(values = fill_values) +guides(fill = "none")return(p)
}
p1 <- create_grouped_boxplot(dfutr5longer, "nucleotide", "percentage", x_label = "5'UTR")
p2 <- create_grouped_boxplot(dfcdslonger, "nucleotide", "percentage", x_label = "CDS")
p3 <- create_grouped_boxplot(dfutr3longer, "nucleotide", "percentage", x_label = "3'UTR")
p4<-p1+p2+p3+plot_layout(nrow = 1,ncol = 3)
ggsave("boxplot-5utr-cds-3tr-ATCG的百分比分布和T检验.pdf",plot=p4,width=18,height=8)

3.输出结果:
在这里插入图片描述

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

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

相关文章

Python-100-Days: Day01

Day01 Python简介 1.1989年Guido von Rossum在圣诞节之夜开始着手python语言编译器的编写。 2.1991年2月 Python v1 编译器诞生&#xff0c;使用C实现的&#xff0c;此时可以调用C的库函数。 3.1994年1月&#xff0c;Python v1.0 正式版发布。 4.2000年10月16日&#xff0…

新药品注册分类5大类的注册标准

在医药行业的浩瀚海洋中&#xff0c;药品注册分类就如同一座明亮的航标灯&#xff0c;指引着每一款新药从实验室走向市场&#xff0c;从理论概念变成患者手中的生命希望。本文将深入探讨化学药、中药、生物药的药品注册分类标准&#xff0c;药品分类常见问题、以及如何高效查询…

linux系统-深入学习文件系统与日志分析

目录 一、inode于block inode于block概括inode的内容inode包含文件的元信息用stat命令可以查看某个文件的inode信息Linux系统文件三个主要的时间属性目录文件架构 用户通过文件名打开文件时&#xff0c;系统内部的过程查看inode号码的实操硬盘分区后的结构 &#x1f447;用户访…

走向大规模应用之前,DePIN 如何突破技术、数据与市场之网

近期&#xff0c;随着分布式物理基础设施网络&#xff08;DePIN&#xff09;的快速演变&#xff0c;一个旨在利用区块链技术彻底改造传统基础设施模型的新兴生态系统正在逐渐浮现。2024 年 4 月&#xff0c;以 peaq 为代表的 DePIN 项目成功筹集了 1500 万美元用于生态系统的扩…

mac配置maven

在 macOS 上配置 Maven 也相对简单。以下是一种常用的方法&#xff1a; 1. 安装maven **下载 Maven&#xff1a;**首先&#xff0c;你需要从 Maven 官网&#xff08;https://maven.apache.org/download.cgi&#xff09;下载最新版本的 Maven。你可以选择二进制压缩包&#xf…

02.Scala简单演示

Scala创建对象的方法与Java有所不同 class可以直接传入形参&#xff1b; 形式为 变量名称&#xff1a;变量类型 逗号隔开 ** ** 方法定义也比较特殊 ** ** def方法名&#xff08;&#xff09;:返回值 { } 其中返回值Unit 等价于Java中的void

系统服务(22年国赛)—— 磁盘管理(压缩去重)

前言&#xff1a;原文在我的博客网站中&#xff0c;持续更新数通、系统方面的知识&#xff0c;欢迎来访&#xff01; 系统服务&#xff08;22年国赛&#xff09;—— 磁盘管理(压缩&&去重)https://myweb.myskillstree.cn/90.html 目录 StorageSrv 安装并创建vdo 将…

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测

多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测 目录 多输入多输出 | Matlab实现WOA-LSSVM鲸鱼算法优化最小二乘支持向量机多输入多输出预测预测效果基本介绍程序设计往期精彩参考资料 预测效果 基本介绍 Matlab实现WOA-LSSVM鲸鱼算法优化…

STL_vector源码剖析

STL vector STL2.91源码地址: https://github.com/lewischeng-ms/sgi-stl 侯捷老师用的是 2.91,不同版本的STL差异很大&#xff0c;靠后版本的STL用了太多typedef以及继承关系&#xff0c;导致可读性很差。 本文参考博客: https://blog.csdn.net/weixin_45389639/article/detai…

记账本React案例(Redux管理状态)

文章目录 整体架构流程 环境搭建 创建项目 技术细节 一、别名路径配置 1.路径解析配置&#xff08;webpack&#xff09; &#xff0c;将/解析为src/ 2.路径联想配置&#xff08;vsCode&#xff09;&#xff0c;使用vscode编辑器时&#xff0c;自动联想出来src文件夹下的…

python-excel自动化-openpyxl

openpyxl学习笔记 创建或打开表格存储和遍历数据设置单元格风格过滤器和排序更改工作表的背景颜色合并单元格冻结窗口数字格式公式图像图表条形图折线图散点图 创建或打开表格 # 创建 import datetime from openpyxl import Workbook # 实例化 wb Workbook() # 激活 work…

使用Excel生成sql脚本(insert/update/delete)

目录 前言 一、Excel文件脚本变量 二、操作示例 前言 在系统使用初期&#xff0c;存在某种原因&#xff0c;需要对数据库数据进行批量处理操作。往往都是通过制定Excel表格&#xff0c;通过Excel导入到数据库中&#xff0c;所以就弄一个excel生成sql的导入脚本&#xff0c;希…

探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;AI赋能分层模式&#xff0c;解构未来&#xff0c;智领风潮 ✨欢迎…

【网络安全】安全事件管理处置 — 安全事件处置思路指导

专栏文章索引&#xff1a;网络安全 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、处理DDOS事件 1.准备工作 2.预防工作 3.检测与分析 4.限制、消除 5.证据收集 二、处理恶意代码事件 1.准备 2.预防 3.检测与分析 4.限制 5.证据收集 6.消除与恢复 …

【Leetcode】vector刷题

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;Leetcode刷题 目录 1.只出现一次的数字2.杨辉三角3.删除有序数组中的重复项4.只出现一次的数字II5.只出现一次的数字III6.电话号码的字母组合 1.只出现一次的数字 题目链接&#xff1a;136.只出现一…

linux 编译opencv遇到问题

linux编译opencv4.8的时候遇到问题 Error: suffix or operands invalid for vpand看到很多说法是升级as这个工具的版本&#xff0c;自测是从2.20升级到2.27就可以了

python提取date的月份和天数

在Python编程中&#xff0c;经常需要从日期中提取月份和天数。这在数据处理、分析和可视化等领域都是非常常见的操作。 本文将介绍如何使用Python提取日期中的月份和天数&#xff0c;并通过代码示例展示具体的实现方法。 1.使用datetime模块获取日期信息 要提取日期的月份和天…

安卓手机连接电脑实用技巧:实现文件传输与共享

在手机使用过程中&#xff0c;我们常常需要将手机中的文件传输到电脑&#xff0c;或者将手机与电脑进行共享。为了实现这一需求&#xff0c;掌握一些实用的安卓手机连接电脑技巧就显得尤为重要。本文将为您详细介绍2种简单、高效且安全的方法&#xff0c;让您轻松实现安卓手机与…

【Python系列】受保护属性

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Scala 04 —— Scala Puzzle 拓展

Scala 04 —— Scala Puzzle 拓展 文章目录 Scala 04 —— Scala Puzzle 拓展一、占位符二、模式匹配的变量和常量模式三、继承 成员声明的位置结果初始化顺序分析BMember 类BConstructor 类 四、缺省初始值与重载五、Scala的集合操作和集合类型保持一致性第一部分代码解释第二…