这是对之前批量处理方法的一个补充,前面的文章
目录
批量处理——for循环批量计算组间差异
批量处理——apply批量计算组间差异
批量处理——for循环画图
批量处理——for循环迁移文件
批量处理——基因之间的相关性
批量处理——基因与免疫细胞的相关性
批量处理——基因与免疫细胞的相关性
出现的需求
在循环过程中,每一次都有一个数据框产生,而最终想要把这些数据框放置在同一个数据框中。
例如我分析数据过程中,第一步是根据免疫细胞的表达情况进行分组,第二步是根据分组,比较选定基因与分组之间的关系。由于免疫细胞浸润的不同,每一次分组都会有差别,所以这要一次循环操作。然后每一次分组后,还有若干基因需要根据分组进行比较。每次进行比较后,会有统计分析的结果,而我需要最后汇总的统计结果。
数据
计算
有两种处理方法,一种是通过创建列表list的形式,另一种是通过创建空的dataframe的形式。
第一种方法
通过提前创建空的dataframe的方式
df <- data.frame()
for(i in 1:22) {
print(colnames(res_cibersort)[i])
mean_num <- mean(res_cibersort[,i])
#根据免疫数据进行分组,并选定分组和名称
res_group <- res_cibersort %>%
as.data.frame() %>%
mutate(group = ifelse(res_cibersort[,i] < mean_num, "Low", 'High')) %>%
select(i, group)
#分组信息和表达信息进行合并
expr_res_group <- expr_candi_gene %>%
.[rownames(res_group),] %>%
cbind(res_group,.)
data <- expr_res_group
# 整合成一个步骤
kruskal_data <- do.call(rbind, lapply(colnames(data)[3:ncol(data)], function(x){
dd <- kruskal.test(data[,x] ~ group, data = data)
data.frame(cell = colnames(data)[1],gene=x,p.value=dd$p.value)
}))
df = rbind(df, kruskal_data)
}
第二种方法
通过创建空list的形式、
l <- list()
for(i in 1:22) {
print(colnames(res_cibersort)[i])
mean_num <- mean(res_cibersort[,i])
res_group <- res_cibersort %>%
as.data.frame() %>%
mutate(group = ifelse(res_cibersort[,i] < mean_num, "Low", 'High')) %>%
select(i, group)
expr_res_group <- expr_candi_gene %>%
.[rownames(res_group),] %>%
cbind(res_group,.)
data <- expr_res_group
# 整合成一个步骤
kruskal_data <- do.call(rbind, lapply(colnames(data)[3:ncol(data)], function(x){
dd <- kruskal.test(data[,x] ~ group, data = data)
data.frame(cell = colnames(data)[1],gene=x,p.value=dd$p.value)
}))
l[[i]] <- kruskal_data
}
df_now <- do.call(rbind,l)
对比两次的数据
两次数据是一致的
最终得到的数据是,根据选定免疫细胞浸润情况,划定分组后,不同基因表达是否有差异。
参考文章
R中将循环产生的数据框合并
网友评论