缘由

生信之路,道阻且长,记录经验,但渡有缘人。

碎碎念

及时当勉励,岁月不饶人 ——陶渊明

代码

  1. 如何选择Pvalue最小的10行,作为火山图的标签
# 模拟数据
set.seed(123)  # 设置种子,以确保结果可复现
protein <- data.frame(
  ProteinID = paste0("Protein", 1:100),
  Pvalue = runif(100, 0, 0.05),  # 随机生成 100 个 P-value
  FirstName = paste0("Gene", 1:100)
)
 
protein_sub <- protein %>%arrange(Pvalue) 
	%>% mutate(label = ifelse(row_number() <= 10, !!sym(first_name), ""))
  1. 如何将邻接矩阵转换为cytoscape的输入形式
# 创建相关性矩阵(假设是一个 4x4 的矩阵)
cor_matrix <- matrix(c(1, 0.8, 0.4, 0.1,
                       0.8, 1, 0.6, 0.2,
                       0.4, 0.6, 1, 0.7,
                       0.1, 0.2, 0.7, 1),
                     nrow = 4, byrow = TRUE)
 
rownames(cor_matrix) <- colnames(cor_matrix) <- c("A", "B", "C", "D")
 
# 设置相关性阈值
threshold <- 0.5
 
#方法一
# 生成一个逻辑矩阵,表示哪些相关性值大于阈值
adj_matrix <- abs(cor_matrix) > threshold
 
# 找到相关性矩阵中大于阈值的位置 #返回二维索引
edges <- which(adj_matrix == TRUE, arr.ind = TRUE)
 
# 提取边的 DataFrame,并添加相关性值
edges_df <- data.frame(
    source = rownames(cor_matrix)[edges[, 1]],  # 行(源节点)
    target = colnames(cor_matrix)[edges[, 2]],  # 列(目标节点)
    correlation = mapply(function(x, y) cor_matrix[x, y], edges[, 1], edges[, 2])  # 相关性值
)
 
#方法二
edges_df  <- reshape2::melt(cor_matrix, varnames = c("source", "target"), value.name = "correlation") %>% 
    filter(correlation>threshold)
 
  1. 如何结合gsub批量列名重命名
 
# 加载必要的包
library(dplyr)
 
# 创建一个模拟数据集
set.seed(123)
protein <- data.frame(
  ProteinID = paste0("Protein", 1:5),
  P.Value_1 = c(0.01, 0.05, 0.02, 0.03, 0.004),
  P.Value_2 = c(0.02, 0.04, 0.03, 0.01, 0.005),
  GeneExpression = c(1.5, 2.1, 3.0, 0.8, 2.2),
  P.Value_3 = c(0.03, 0.01, 0.04, 0.02, 0.06)
)
 
# 查看原始列名
colnames(protein)
 
# 使用 gsub 批量重命名列名中的 P.Value
protein <- protein %>%
  rename_with(~gsub(pattern = ".*P.Value", replacement = "pvalue", x = ., ignore.case = TRUE))
 
# 查看修改后的列名
colnames(protein)
  1. 如何提取pathway的数字部分
pathway<- c("map01250", "map01240", "map01220")
stringr::str_extract(pathway, "\\d+$")
  1. 如何按照 “Group” 列分组,并对每一列进行求和,保持列名不变
# 加载必要的包
library(dplyr)
 
# 创建一个模拟数据框
set.seed(123)  # 设置随机种子
data <- data.frame(
  Group = c("A", "B", "A", "B", "A", "B"),
  Value1 = c(1, 2, 3, 4, 5, 6),
  Value2 = c(7, 8, 9, 10, 11, 12)
)
 
# 查看原始数据
print(data)
 
result <- data %>%
  group_by(Group) %>%  # 按 "Group" 列进行分组
  summarise(across(everything(), mean, .names = "{.col}"))  # 按列求和并保留列名
 
# 查看结果
print(result)