1.如何对列名进行多次替换?

#方法1 使用gsub
library(stringr)
colname <- colnames(df) %>% gsub("_fpkm","", .) %>% 
    gsub("-vs-","_vs_", .)%>%
    gsub("diffexp_deseq2_|diffexp_", "", .) 
    
#方法2 使用str_replace_all
colname <- colnames(df) %>%
    str_replace_all(c(
        "_fpkm" = "",
        "-vs-" = "_vs_",
        "diffexp_deseq2_|diffexp_" = ""
    ))

2.如何忽略大小写 进行替换?

library(dplyr)
library(stringr)
 
df <- data.frame(
    gene_id = c("g1", "g2"),
    gene_name = c("GeneA", "GeneB"),
    expression = c(5.2, 3.8),
    stringsAsFactors = FALSE
)
方法1
df_renamed <- df %>%
    rename_with(~ str_replace_all(., regex("gene", ignore_case = TRUE), "Protein"))
方法2
df_renamed <- df %>%
    rename_with(~ gsub("gene", "Protein", ., ignore.case = TRUE))
 

3.找出某列为空或者为NA的行并进行过滤?

library(dplyr)
# 创建示例数据框
df <- data.frame(
    ID = 1:6,
    Biological_Process = c("Process1", NA, "", "Process2", "Process3", "")
)
 
 
na_empty <- function(x) is.na(x) | x == ""
# 使用 is_na_or_empty 函数筛选
df %>%
    filter(!na_empty(Biological_Process))

4.如何快速对换对照组和处理组的比较顺序?

#方法1
cmp <- paste0(strsplit(cmp,"_vs_")[[1]][2], "_vs_", strsplit(cmp,"_vs_")[[1]][1])
#方法2
cmp <- paste0(rev(strsplit(cmp, "_vs_")[[1]]), collapse = "_vs_")

5.如何包含重复蛋白和GO信息的长格式数据,通过 Protein_accession 和 GO_levels 分组,并将不同 Category 下的 ID 聚合展开为宽格式表格?

library(dplyr)
library(reshape2)
 
# 构建示例数据
df <- data.frame(
    Protein_accession = c("P12345", "P12345", "P67890", "P67890", "P67890"),
    GO_levels= c("level 2", "level 2", "level 3", "level 3", "level 3"),
    Category = c("Cellular Process", "Cellular Process", "Metabolism", "Metabolism", "Transport"),
    ID = c("GO:0008150", "GO:0009987", "GO:0006091", "GO:0008152", "GO:0006810"),
    stringsAsFactors = FALSE
)
 
# 应用 dcast 聚合
df_wide <- df %>%
    dcast(Protein_accession + GO_levels ~ Category,
          value.var = "ID",
          fun.aggregate = function(x) paste(unique(x), collapse = ", "))

dcast的聚合