代码之家  ›  专栏  ›  技术社区  ›  Peter

当隐含id列时,是否合并csv文件中的许多数据帧?

  •  19
  • Peter  · 技术社区  · 15 年前

    我想将一组数据帧合并在一起(因为如果您只处理w/one,那么许多操作似乎更容易,但是如果我错了,请纠正我)。

    目前我有一个这样的数据帧:

    ID, var1, var2
    A,  2,    2
    B,  4,    5
    .
    .
    Z,  3,    2
    

    每个ID都在一行上,有几个单独的测量值

    我还有一个csv文件,每个ID都有重复测量,比如:

    文件名=id_b.csv

    time, var4, var5
    0,    1,    2
    1,    4,    5
    2,    1,    6
    ...
    

    我想要的是:

    ID, time, va1, var2, var4, var5
    ...
    B,  0,    4,   5,    1,    2,
    B,  1,    4,   5,    4,    5,
    B,  2,    4,   5,    1,    6,
    ...
    

    我真的不在乎列顺序。我能想到的唯一解决方案是将id列添加到每个csv文件中,然后循环调用它们 merge() 好几次。有更优雅的方法吗?

    1 回复  |  直到 7 年前
        1
  •  15
  •   learnr    15 年前

    df1 <- read.csv(textConnection("ID, var1, var2
    A,  2,    2
    B,  4,    5"))
    
    # assuming the imported csv-files are in working directory
    filenames <- list.files(getwd(), pattern = "ID_[A-Z].csv")
    
    # extract ID from filename
    ids <- gsub("ID_([A-Z]).csv", "\\1", filenames)
    
    # import csv-files and append ID
    library(plyr)
    import <- mdply(filenames, read.csv)
    import$ID <- ids[import$Var1]
    import$Var1 <- NULL
    
    # merge imported csv-files and the existing dataframe
    merge(df1, import)  
    

    ID var1 var2 time var4 var5
    1  B    4    5    0    1    2
    2  B    4    5    1    4    5
    3  B    4    5    2    1    6