如何将一个包含多个表格的Excel文件拆分成单独的数据框?

18 浏览
0 Comments

如何将一个包含多个表格的Excel文件拆分成单独的数据框?

我正在导入一个Excel文件,其中一个单元格有多个表格。\n在使用read_excel()在R中导入时,我注意到每个表格可以通过查看col1与其他表格分隔开:如果它包含2-4行NA,然后是一行header,那么接下来的内容就是一个新表格,我想将其存储为数据框。\n例如,下面的模式在整个文件中重复出现,每个都是一个单独的表格:\n

col1         col2       col3       col4
NA           header2    header3    header4  <-- 使用这些标题和
NA           header2a   header3a   header4a <-- 将这些附加到上述行
header       Number     Number     Number   <-- 忽略此行
attribute1   Number     Number     Number
attribute2   Number     Number     Number
attribute3   Number     Number     Number
NA           NA         NA         NA
NA           NA         NA         NA

\n从上面的内容中,我想提取headers下面的所有内容,并省略NA行(表示该表格的结束)。示例输出:\n\nwhatever header2_header2a header3_header3a header4_header4a\nattribute1 Number Number Number\nattribute2 Number Number Number\nattribute3 Number Number Number\n\n最后,我想将此应用到整个文件,以便每个表格都被存储为自己的数据框。\n这真的可能吗?

0
0 Comments

这个问题的出现的原因是用户想要将一个包含多个表格的Excel文件分割成独立的数据框。下面是解决这个问题的方法:

首先,可以使用rowSums(is.na(d)) == ncol(d)来找到所有空行,并将数据分割成多个部分。然后,使用split(d, f = data.table::rleid(breaks))将数据分成多个数据框,并使用Filter(function(x) !all(is.na(x)), dlist)去掉所有空数据框。

接下来,可以使用lapply函数来清理剩余的数据。对于每个数据框,可以使用sapply(x[1:2, -1], paste, collapse = "_")来生成列名,然后使用x[-(1:2),]去掉前两行,并使用names(x) = c("whatever", nm)将生成的列名赋给数据框的列。

最后,返回清理后的数据框列表dlist

以上就是解决这个问题的方法。根据用户提供的输入数据,可以将其分割成两个数据框列表。

0