【问题标题】:R - Keeping column names after merging multiple .xlsx filesR - 合并多个 .xlsx 文件后保留列名
【发布时间】:2021-09-26 00:01:31
【问题描述】:

我想合并多个 xlsx 文件(大约 100 个)的列,它们都具有相同的结构,这意味着它们都有 5 行和 2 列。

我正在使用here 提供的答案(稍作修改以合并列而不是行)

library(purrr)
library(writexl)


files <- list.files(pattern="*.xlsx")
mainDF <- files %>% map_dfc(read.xlsx) 

write_xlsx(mainDF, "merge.xlsx")

但我最终得到的是每张纸的第一行现在是列名。

如何在合并文件中保留原始列名?

在合并文件中还有一个名为“file”的新列显示文件名,我也想删除它们。

任何帮助将不胜感激:)

编辑

示例:我有 file1.xlsx、file2.xlsx 看起来像

Data col1              Data  col2
 x    1                 x     4
 y    3                 y     6

我的输出是

1 4
3 6

但我的目标是拥有 mergefile.xlsx

Data col1 col2
  x   1    4
  y   3    6

【问题讨论】:

  • 每个文件的第一行都是空白的吗?
  • 单个文件的第一行包含列名,但合并后的列名是数字(单个文件中使用的数据)
  • 你是横向绑定这些文件吗?我的意思是水平添加列?
  • @monte 是的,我想另一种说法是只取每个文件的第二列并将其附加到第一个文件(如果有意义的话)
  • 我建议你使用map而不是map_dfc,这样你的mainDF就是一个列表,其元素是你的excel表格,然后使用mainDF %&gt;% reduce(~ full_join(..1, ..2, by = "Data"))绑定它们。

标签: r purrr writexl


【解决方案1】:

我认为您的问题是read.csv 没有将它生成的数据帧的列名设置为输入文件的标题。您可以使用readr::read_csv 来获取此行为。

library(dplyr)
library(readr)

files <- list.files(pattern="*.csv")
dfs <- lapply(files, read_csv)

combined_df <- Reduce(function(x, y) full_join(x, y, by = "Data"), dfs)

write_xlsx(combined_df, "merge.xlsx")

【讨论】:

    猜你喜欢
    • 2019-12-27
    • 2020-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-11
    • 1970-01-01
    相关资源
    最近更新 更多