批量处理——把循环中产生的数据框合并

R

这是对之前批量处理方法的一个补充,前面的文章

目录
批量处理——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中将循环产生的数据框合并

你可能感兴趣的:(批量处理——把循环中产生的数据框合并)