缘由
生信之路,道阻且长,记录经验,但渡有缘人。
碎碎念
及时当勉励,岁月不饶人 ——陶渊明
代码
- 如何提取括号中的内容?
# 模拟数据:字符串中包含括号
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) # 去掉括号- 如何规范命名, 差异比较组合的名字?
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- 如何提取列表中第一元素? 适用于提取字符串分割之后的第一个元素,推荐顺序方法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]- 如何按分号(;)拆分成多行,并确保拆分后的每一列中的元素按顺序对应,使得每个分号前的元素与相应列中的其他元素对齐?
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)- 如何选择多个比较组合的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)
- 字典
# 创建一个数据框
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)