【问题标题】:Read and merge multiple xlsx files with different structure in R在R中读取并合并多个具有不同结构的xlsx文件
【发布时间】:2020-09-30 06:23:37
【问题描述】:

我想使用 R 读取和合并多个 (>20) 个 .xlsx 文件。

这就是我的 .xlsx 文件的外观。

Sample  X  Y  Z
Sample1  5  3  1
Sample2  4  1  11
Sample3  9  11  9


Sample  A  B  Z
Sample4  12  1  1
Sample5  6  1.1  1.41
Sample6  7  91  1


Sample  C  A  Z
Sample7  4  2  9
Sample8  98  11  61

我想将它们合并成一个带有标题“Sample”、“X”、“Y”、“Z”、“A”、“B”、“C”的 df。没有特别的顺序,但应该包含所有内容。

我找到了一些适用于具有相同结构的 .xlsx 文件的解决方案(例如 Merge multiple Excel files starting at row in R),但它们不适用于我的问题。

【问题讨论】:

  • @RonakShah 我认为不需要在这里合并?看起来我们可以使用行绑定,例如使用data.table::rbindlist( mylist, use.names = TRUE, fill = TRUE)
  • @Wimpel 你是对的,这里没有要合并的列。所以行绑定是正确的方法。

标签: r


【解决方案1】:

这可以通过dplyr::bind_rows 轻松实现,与rbind 相比,rbind 允许按行绑定具有不同列数和列名的 df:

df1 <- read.table(text = "Sample  X  Y  Z
Sample1  5  3  1
Sample2  4  1  11
Sample3  9  11  9", header = TRUE)

df2 <- read.table(text = "Sample  A  B  Z
Sample4  12  1  1
Sample5  6  1.1  1.41
Sample6  7  91  1", header = TRUE)

df3 <- read.table(text = "Sample  C  A  Z
Sample7  4  2  9
Sample8  98  11  61", header = TRUE)

df <- list(df1, df2, df3)

dplyr::bind_rows(df)
#>    Sample  X  Y     Z  A    B  C
#> 1 Sample1  5  3  1.00 NA   NA NA
#> 2 Sample2  4  1 11.00 NA   NA NA
#> 3 Sample3  9 11  9.00 NA   NA NA
#> 4 Sample4 NA NA  1.00 12  1.0 NA
#> 5 Sample5 NA NA  1.41  6  1.1 NA
#> 6 Sample6 NA NA  1.00  7 91.0 NA
#> 7 Sample7 NA NA  9.00  2   NA  4
#> 8 Sample8 NA NA 61.00 11   NA 98

【讨论】:

    【解决方案2】:

    感谢@RonakShah 和@Wimpel,这行得通:

    #path to files
    path <- "C:/Users/your/path"
    
    #list diles
    filenames_list <- list.files(path= path, full.names=TRUE)
    
    #Store files in a list
    All <- lapply(filenames_list,function(filename){
        read.xlsx(filename)
     })
    
    #merge the dfs
    merged_df <- data.table::rbindlist(All, use.names = TRUE, fill = TRUE)
    

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2018-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-26
      相关资源
      最近更新 更多