【发布时间】: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 个)。
写这篇文章对我很有帮助。
【问题讨论】: