缘由

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

碎碎念

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

代码

  1. 将行移动到任意位置,常用于热图的调整
 
library(dplyr)
 
move_row <- function(data, target_genes, target_position = "first") {
	# 检查目标基因是否存在于数据中
	if (!all(target_genes %in% data$Gene.name)) {
		stop("Some target genes are not present in the data.")
	}
	
	# 提取目标行
	target_rows <- data %>% filter(Gene.name %in% target_genes)
	
	# 剩余行
	other_rows <- data %>% filter(!Gene.name %in% target_genes)
	
	# 判断目标位置
	if (target_position == "first") {
		# 移动到首行
		result <- bind_rows(target_rows, other_rows)
	} else if (target_position == "last") {
		# 移动到最后一行
		result <- bind_rows(other_rows, target_rows)
	} else if (is.numeric(target_position) && target_position > 0) {
		# 在目标位置前插入目标行
		result <- bind_rows(
			other_rows[1:(target_position - 1), ],  # 目标位置之前的行
			target_rows,                            # 目标行
			other_rows[target_position:nrow(other_rows), ]  # 目标位置之后的行
		)
	} else {
		stop("Invalid target_position: must be 'first', 'last', or a positive integer.")
	}
	
	return(result)
}
 
# 示例数据
data <- data.frame(
	Gene.name = c("GeneA", "GeneB", "GeneC", "GeneD", "GeneE"),
	Value1 = c(10, 20, 30, 40, 50),
	Value2 = c(5, 15, 25, 35, 45)
)
 
#将 GeneC 移动到第 2 行
move_row(data, target_genes = "GeneC", target_position = "last")
 
# 将 GeneC 和 GeneD 移动到首行
move_row(data, target_genes = c("GeneC", "GeneD"), target_position = "first")
 
# 将 GeneC 移动到最后一行
move_row(data, target_genes = "GeneC", target_position = "last")
  1. 如何将指定列连接在一块
df <- df %>% mutate(mark=str_c(protein_accession,  Amino.acid,  Position, sep = "_")) 
  1. 选择两个列名之间的列
# 选择 A 和 F 之间的列(不包括 A 和 F)
result <- df %>%
  select((which(names(df) == "A") + 1):(which(names(df) == "F") - 1))
print(result)
 
  1. 如何快速计算dataframe的pvalue值
# 示例数据框
set.seed(123)  # 设置随机种子以确保结果可重复
df2 <- data.frame(
	Sample1 = rnorm(10, mean = 5, sd = 2),  # 处理组样本 1
	Sample2 = rnorm(10, mean = 5, sd = 2),  # 处理组样本 2
	Control1 = rnorm(10, mean = 3, sd = 2), # 对照组样本 1
	Control2 = rnorm(10, mean = 3, sd = 2)  # 对照组样本 2
)
 
# 样本组划分
tr_samples <- c("Sample1", "Sample2")  # 处理组样本列
ck_samples <- c("Control1", "Control2") # 对照组样本列
 
# 计算 p 值
p_values <- apply(df2, 1, function(row) {
	t.test(row[tr_samples], row[ck_samples])$p.value
})
 
# 添加 p 值到数据框
df2$p_value <- p_values
 
  1. 在R里面如何使用字典进行列名重命名
# 加载需要的库
library(dplyr)
 
# 模拟 group 文件的 CSV 数据
group <- data.frame(
	oldname = c("Age", "Height"),
	newname = c("Age_Years", "Height_cm"),
	stringsAsFactors = FALSE
)
 
# 创建一个命名列表,用于列名替换
column_mapping <- setNames(object=group$oldname, nm=group$newname)
 
# 创建一个数据框(假设 data 是你要重命名列的原始数据框)
data <- data.frame(
	Age = c(21, 22, 23),
	Height = c(175, 180, 165),
	Weight = c(70, 80, 65),
	stringsAsFactors = FALSE
)
 
# 使用 dplyr::rename 和 column_mapping 替换列名
data_renamed <- data %>% dplyr::rename(!!!column_mapping)  # 通过 !!! 展开列名映射
 
# 查看修改后的数据框
print("修改后的数据框:")
print(data_renamed)