如何将一个包含多个表格的Excel文件拆分成单独的数据框?
如何将一个包含多个表格的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这真的可能吗?
这个问题的出现的原因是用户想要将一个包含多个表格的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
。
以上就是解决这个问题的方法。根据用户提供的输入数据,可以将其分割成两个数据框列表。