【问题标题】:I need to extract Excel sheets by name from a list of data frames in which each row is the name of the sheet我需要从数据框列表中按名称提取 Excel 工作表,其中每一行都是工作表的名称
【发布时间】:2020-08-12 15:05:52
【问题描述】:

所以,我在 xlsx 中有很多文件,我需要每个文件中的几张。结构是这样的:

3 张带有最终成绩的表格,例如成绩单。第一个是全局分数,第二个是我们评估的第一件事,称之为“a”;第三个是关于“b”分数的。全局分数是“a”和“b”之间的索引。

文件的行数不同。例如,我们评估“1”、“2”、“3”、“4”、“5”和“6”。但是,许多文件没有“2”和“5”;其他人没有“5”,很少有人拥有我们评估的所有内容。在“1”表中,有人用多个标准的评估填充单元格:“它显示了所有信息?” “信息是csv文件?”并打分。

在每个文件中,我们都有一个带有“a”演算的隐藏表格,以及另一个带有“b”演算的每个数字的表格:即a1、b1、a2、b2、a3、b3等等.我知道,听起来很乱。

除此之外,我们还有另外两个隐藏表,其中包含 a1、b1 等的摘要版本。

我需要摘要版本。

所以,我提取了我们评估的行的名称(即 1、2、4、6)和 R studio 中工作表的名称(全局索引、a 索引、b 索引、a1、b1、摘要 a1、摘要a2 等)并使用地图为每个事物创建一个列表。

所以...

我有一个dir_ls(folder),其中有所有 xlsx 文件 我使用purrr::map() 创建的数据框列表,其中包含每个 xlsx 文件所需的工作表名称。这里,是一个列表,列表的每个元素都是一个数据框,每个数据框中的每一行都是我需要提取的工作表的名称。

我试过了,其中 da 是带有工作表名称的数据框列表:

read_excel(dir_ls(inp)[1], sheet = map(da, ~ as.character(.x)))

map(dir_ls(inp), ~
         read_excel(.x, sheet = map(da, ~
                                      as.character(.y))))

这适用于具有 1 个工作表名称的 1 个文件:

try <- da[["2_Eva_23_AGATAN.xlsx"]]

read_excel(paste(inp, list.files(inp), sep = "/")[1], sheet = as.character(try[1,1]))

但是,我需要 146 个文件和 1,348 个工作表名称。

编辑: 我试试这个:

read_excel(dir_ls(inp)[[1]], sheet = map_chr(try, ~ .))

并收到以下消息

Error: Result 1 must be a single string, not a character vector of length 10

希望能有所帮助。

我一直在想这是 purrr 向量长度不同的问题。

编辑 2:

我想通了!

所以,我一直在思考两个不同长度的向量,我决定用 Excel 文件的路径和工作表名称制作一个数据框。

使用唯一的数据框,我使用 map2。

map2(df$path, df$sheet, ~ read_excel(path = .x, sheet = .y))

现在我必须过滤和清理数据帧(超过 1,000 个)。

写这篇文章对我很有帮助。

【问题讨论】:

    标签: r excel purrr


    【解决方案1】:

    我想通了!

    所以,我一直在思考两个不同长度的向量,我决定用 Excel 文件的路径和工作表名称制作一个数据框。

    使用唯一的数据框,我使用 map2。

    map2(df$path, df$sheet, ~ read_excel(path = .x, sheet = .y))
    

    现在我必须过滤和清理数据帧(超过 1,000 个)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-21
      • 2020-03-09
      • 1970-01-01
      相关资源
      最近更新 更多