缘由

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

碎碎念

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

代码

  1. 如何提取括号中的内容?
# 模拟数据:字符串中包含括号
text_data <- c("apple (fruit)", "banana (yellow)", "orange (fruit)", "grape (purple)", "apple (green)")
 
#1. 使用捕获组
matches <- sub(".*\\((.*?)\\).*", "\\1", text_data)
print(matches)
 
#2. 使用正则匹配
matches <- regmatches(text_data, regexpr("\\((.*?)\\)", text_data))
matches <- gsub("[()]", "", matches)  # 去掉括号
  1. 如何规范命名, 差异比较组合的名字?
library(dplyr)
模拟数据
df <- data.frame(
   A=5,
   B=4
  "D1/D2.Ratio" = rnorm(5),
  "D1/D2.P.value" = rnorm(5),
  "D3/D4.Ratio" = rnorm(5),
  "D3/D4.P.value" = rnorm(5)
)
 
df <- df %>%
  rename_with(~ gsub("/", "vs", .)) %>%   # 替换斜杠为vs
  rename_with(~ gsub("Ratio", "FC", .)) %>%    # 替换Ratio为FC
  rename_with(~ gsub("P.value", "pvalue", .))  # 替换P.value为pvalue
  1. 如何提取列表中第一元素? 适用于提取字符串分割之后的第一个元素,推荐顺序方法2 方法1 方法3
library(purrr)
lst <- list(c(1, 2, 3), c(4, 5, 6), c(7, 8, 9))
#方法1
purrr::map_chr(lst, ~as.character(.x[1]))
#方法2
sapply(lst,function(i) i[1])
#方法3
do.call(rbind, lst)[,1]
  1. 如何按分号(;)拆分成多行,并确保拆分后的每一列中的元素按顺序对应,使得每个分号前的元素与相应列中的其他元素对齐?
library(tidyr)
library(dplyr)
 
# 假设你的数据是这样的:
data <- data.frame(
	subunits_uniprot_id = c("P123;P56524", "P234;Q9ULQ6"),
	subunits_gene_name = c("B123;HDAC4", "B234;HDAC5"),
	subunits_gene_name_synonyms = c("c123,LAZ3,ZBTB27,ZNF51;KIAA0288", 
									"c234,LAZ3,ZBTB27,ZNF51;KIAA0600"),
	stringsAsFactors = FALSE
)
 
# 使用分号拆分每一列
data_split <- data %>%
	separate_rows(subunits_uniprot_id, subunits_gene_name, subunits_gene_name_synonyms, sep = ";")
 
# 输出结果
print(data_split)
  1. 如何选择多个比较组合的Foldchange并且生成对应组合的log2FC?
library(dplyr)
 
# 创建模拟数据
data <- data.frame(
    Gene = c("GeneA", "GeneB", "GeneC"),
    A_vs_B_FC = c(2, 4, 8),
    B_vs_C_FC = c(1, 2, 3),
    Other_Column = c(5, 6, 7),
    stringsAsFactors = FALSE
)
 
# 使用 mutate 和 across 进行 log2 转换
data_transformed <- data %>%
    mutate(across(contains("FC"), ~ log2(.), .names = "{gsub('FC$', 'log2FC', .col)}"))
 
# 输出结果
print(data_transformed)
 
  1. 字典
# 创建一个数据框
data <- data.frame(
    Age = c(21, 22, 23),
    Height = c(175, 180, 165),
    Weight = c(70, 80, 65),
    stringsAsFactors = FALSE
)
 
# 查看原始数据框
print("原始数据框:")
print(data)
 
# 创建一个新的列名映射字典,仅修改 Age 和 Height 列
column_mapping <- c("Age" = "Age_Years", "Height" = "Height_cm")
 
# 使用 match 保证按正确顺序替换列名
colnames(data)[match(names(column_mapping), colnames(data))] <- column_mapping
 
# 查看修改后的数据框
print("修改后的数据框:")
print(data)