缘由
生信之路,道阻且长,记录经验,但渡有缘人。
碎碎念
及时当勉励,岁月不饶人 ——陶渊明
代码
如何选择Pvalue最小的10行,作为火山图的标签
1
2
3
4
5
6
7
8
9
10
# 模拟数据
set.seed(123) # 设置种子,以确保结果可复现
protein <- data.frame(
ProteinID = paste0("Protein", 1:100),
Pvalue = runif(100, 0, 0.05), # 随机生成 100 个 P-value
FirstName = paste0("Gene", 1:100)
)
protein_sub <- protein %>%arrange(Pvalue)
%>% mutate(label = ifelse(row_number() <= 10, !!sym(first_name), ""))
如何将邻接矩阵转换为cytoscape的输入形式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 创建相关性矩阵(假设是一个 4x4 的矩阵)
cor_matrix <- matrix(c(1, 0.8, 0.4, 0.1,
0.8, 1, 0.6, 0.2,
0.4, 0.6, 1, 0.7,
0.1, 0.2, 0.7, 1),
nrow = 4, byrow = TRUE)
rownames(cor_matrix) <- colnames(cor_matrix) <- c("A", "B", "C", "D")
# 设置相关性阈值
threshold <- 0.5
#方法一
# 生成一个逻辑矩阵,表示哪些相关性值大于阈值
adj_matrix <- abs(cor_matrix) > threshold
# 找到相关性矩阵中大于阈值的位置 #返回二维索引
edges <- which(adj_matrix == TRUE, arr.ind = TRUE)
# 提取边的 DataFrame,并添加相关性值
edges_df <- data.frame(
source = rownames(cor_matrix)[edges[, 1]], # 行(源节点)
target = colnames(cor_matrix)[edges[, 2]], # 列(目标节点)
correlation = mapply(function(x, y) cor_matrix[x, y], edges[, 1], edges[, 2]) # 相关性值
)
#方法二
edges_df <- reshape2::melt(cor_matrix, varnames = c("source", "target"), value.name = "correlation") %>%
filter(correlation>threshold)
如何结合gsub批量列名重命名
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 加载必要的包
library(dplyr)
# 创建一个模拟数据集
set.seed(123)
protein <- data.frame(
ProteinID = paste0("Protein", 1:5),
P.Value_1 = c(0.01, 0.05, 0.02, 0.03, 0.004),
P.Value_2 = c(0.02, 0.04, 0.03, 0.01, 0.005),
GeneExpression = c(1.5, 2.1, 3.0, 0.8, 2.2),
P.Value_3 = c(0.03, 0.01, 0.04, 0.02, 0.06)
)
# 查看原始列名
colnames(protein)
# 使用 gsub 批量重命名列名中的 P.Value
protein <- protein %>%
rename_with(~gsub(pattern = ".*P.Value", replacement = "pvalue", x = ., ignore.case = TRUE))
# 查看修改后的列名
colnames(protein)
如何提取pathway的数字部分
1
2
pathway<- c("map01250", "map01240", "map01220")
stringr::str_extract(pathway, "\\d+$")
如何按照 "Group" 列分组,并对每一列进行求和,保持列名不变
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 加载必要的包
library(dplyr)
# 创建一个模拟数据框
set.seed(123) # 设置随机种子
data <- data.frame(
Group = c("A", "B", "A", "B", "A", "B"),
Value1 = c(1, 2, 3, 4, 5, 6),
Value2 = c(7, 8, 9, 10, 11, 12)
)
# 查看原始数据
print(data)
result <- data %>%
group_by(Group) %>% # 按 "Group" 列进行分组
summarise(across(everything(), mean, .names = "{.col}")) # 按列求和并保留列名
# 查看结果
print(result)