【问题标题】:Reorganizing data in R. Appending rows to columns在 R 中重新组织数据。将行附加到列
【发布时间】:2013-05-07 13:23:23
【问题描述】:

我正面临数据的结构重组,但不幸的是我被卡住了。

我读入 R 让我们说一些 txt 文件(每个都有一个特定的名称),所有这些文件的结构(数据框)都以相同的方式使用“基因”和 4 个条件“A1”、“A2 , "A3" 和 "A4" 及其各自的值:

Gene A1 A2 A3 A4  
Gene1 value1.1 value1.2 value1.3 value1.4
Gene2 value2.1 value2.2 value2.3 value2.4
Gene3 value3.1 value3.2 value3.3 value3.4
...

但是读入 R 的每个文件都有不同的文件名(filename1, filename2, filename3,...)。

我想将所有这些文件中的数据重新组织成一个具有以下结构的数据文件:

    id Gene1_A1 Gene1_A2 Gene1_A3 Gene1_A4 Gene2_A1 Gene2_A2 Gene2_A3 Gene2_A4 Gene3_A1 Gene3_A2 Gene3_A3 Gene3_A4 ...
   filename1 value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4
    filename2
    filename3
    ...

换句话说,来自 Gene2 的数据应该在来自 Gene1 的数据之后,然后是来自 Gene3 的数据,以此类推。 然后每一行代表一个 id(意味着每个 txt 文件名)。 输出表的标题是“基因”名称(Gene1、Gene2、Gene3、...)和条件(A1、A2、A3、A4)的串联。

谁能给我一个建议,我该如何解决这个问题? 提前谢谢了 亲切的问候 s

【问题讨论】:

    标签: r data-structures reshape


    【解决方案1】:
    sample.table.text <- "Gene A1 A2 A3 A4  
    Gene1 value1.1 value1.2 value1.3 value1.4
    Gene2 value2.1 value2.2 value2.3 value2.4
    Gene3 value3.1 value3.2 value3.3 value3.4"
    
    # create some sample files
    files <- replicate(2, tempfile())
    for (f in files) write(sample.table.text, f)
    
    # read and reshape
    dat <- lapply(files, function(fname) {
        x <- read.table(fname, header=TRUE)
        x['id'] <- basename(fname)
        reshape(x, idvar='id', timevar='Gene', direction='wide')
    })
    # collapse into one data.frame
    result <- do.call(rbind, dat)
    result
    #                id A1.Gene1 A2.Gene1 A3.Gene1 A4.Gene1 A1.Gene2 A2.Gene2 A3.Gene2 A4.Gene2 A1.Gene3 A2.Gene3 A3.Gene3 A4.Gene3
    # 1 file848632b4675 value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4
    # 2 file84864ad4a6c value1.1 value1.2 value1.3 value1.4 value2.1 value2.2 value2.3 value2.4 value3.1 value3.2 value3.3 value3.4
    
    # remove temp files
    for (f in files) unlink(f)
    

    【讨论】:

    • 嘿,非常感谢,我不知道这个功能。这绝对是我需要的。我正在尝试通过重塑功能来了解它到底在做什么。我也在问自己是否也可以合并 Gene1.A1 等等,而不是合并 A1.Gene1 等等。
    • 在这种情况下,reshape 会创建 A1.Gene1、A2.Gene1 等等,难道不能改变顺序得到 Gene1.A1、Gene1.A2 吗?
    • 不,但试试这个:`names(result)
    • 太棒了,这就是工作!非常感谢,我又学到了一些新东西
    猜你喜欢
    • 2022-01-02
    • 2017-10-17
    • 1970-01-01
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    相关资源
    最近更新 更多