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的聚合