【问题标题】:for loop with dplyr带有 dplyr 的 for 循环
【发布时间】:2021-09-12 20:20:07
【问题描述】:

我有一堆我手动读取的文件:

# gel above replicates

    A_gel <-read.delim("XL1_3_S35_L004_R1_001_w_XL2_3_S37_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    B_gel <-read.delim("XL2_3_S37_L004_R1_001_w_XL2_3_S37_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    C_gel <- read.delim("XL2_3_S37_L004_R1_001_w_XL1_3_S35_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    D_gel <- read.delim("XL1_3_S35_L004_R1_001_w_XL1_3_S35_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
# gel below replicates
    
    A_below_gel <- read.delim("XL1_3b_S36_L004_R1_001_w_XL2_3b_S38_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    B_below_gel <- read.delim("XL2_3b_S38_L004_R1_001_w_XL2_3b_S38_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    C_below_gel <- read.delim("XL2_3b_S38_L004_R1_001_w_XL1_3b_S36_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")
    
    D_below_gel <- read.delim("XL1_3b_S36_L004_R1_001_w_XL1_3b_S36_L004_R1_001_01.basedon.peaks.l2inputnormnew.bed.compressed.bed")

我想更改这些文件的所有列,并按开始列排列,如下所示:

colnames(A_gel) <- c("Chromosome", "Start", "End", "LogPVal", "LogFC", "Strand")
    
A_gel <- A_gel %>%
      arrange(A_gel$Start)

相反,我想对使用 R 的所有文件使用 for 循环。

【问题讨论】:

    标签: r for-loop dplyr


    【解决方案1】:

    永远不要按照相同的模式创建多个变量。对于这个一般性问题,正确支持的解决方案是使用 lists(即,除了变量 A_gelB_gel、...,您有一个变量 gel,它是一个包含您的个人data.frames;您也可以为这些单独的项目指定名称,尽管在您的情况下似乎没有必要)。

    然后你可以使用例如lapply 运行您的文件路径并将不同文件的数据读入该列表:

    gel = lapply(gel_filenames, read.delim)
    below_gel = lapply(below_gel_filenames, read.delim)
    

    ...同样,您可以将您的排列代码放入一个函数中并应用它,将上面的内容更改为:

    read_bed = function (filename) {
        read.delim(filename) %>%
            setNames(c("Chromosome", "Start", "End", "LogPVal", "LogFC", "Strand")) %>%
            arrange(Start)
    }
    
    # …
    
    gel = lapply(gel_filenames, read_bed)
    

    更好的是,使用purrr::map_dfr 将所有数据读入一个单个组合表:

    gel = gel_filenames %>%
        setNames(., .) %>%
        map_dfr(read_bed, .id = 'Filename')
    

    setNames(., .) 步骤是必要的,因为read_dfr 将输入向量的名称 分配给添加的 ID 列。)

    这将为“GEL”数据创建一个主表,其中为原始文件名添加了一个 ID 列(您可能只想从中提取一些 ID,使用 tidyr::extract)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-02-28
      • 2021-08-05
      • 2016-10-15
      • 1970-01-01
      • 2013-10-08
      • 1970-01-01
      • 2015-11-26
      • 1970-01-01
      相关资源
      最近更新 更多