在R中阅读两行标题

我有一个像下面的图片一样的简单结构的excel文件。

Excel结构

AB abcabc 0.42 0.42 0.42 0.42 0.42 0.42 0.42 0.42 0.42 0.42 0.42 0.42 

如何获得R中的data.frame如下所示?

 col_name abc A 0.42 0.42 0.42 A 0.42 0.42 0.42 B 0.42 0.42 0.42 B 0.42 0.42 0.42 

一个重要的补充。 样例结构 – 只是整个表的一部分。

整个excel看起来像:

整个文档

只要Excel文件很小,我会这样来处理它。

 library(readxl) library(zoo) library(tidyr) library(dplyr) library(reshape2) cols <- read_excel("path_to_file.xlsx", col_names = FALSE)[1:2, ] cols[1, ] <- na.locf(as.character(cols[1, ]), na.rm = FALSE) cols <- vapply(X = cols, FUN = function(x) if (is.na(x[1])) x[2] else paste0(x, collapse = "_"), FUN.VALUE = character(1)) DFrame <- read_excel("path_to_file.xlsx", col_names = FALSE, skip = 2) %>% setNames(cols) %>% mutate(row_id = row_number()) DFrame DFrame %>% select(row_id, A_a:B_c) %>% gather(column, value, A_a:B_c) %>% mutate(AB_group = sub("(^[AB])_.+$", "\\1", column), column = sub("^[AB]_", "", column)) %>% dcast(row_id + AB_group ~ column, value.var = "value") 

缺点是,由于read_excel没有nrows参数,所以这段代码实际上是两次读取文件。 还有其他一些可以读取excel文件的软件包,比如gdata::read.xls ,它们只能读取前两行来获取列名。 我觉得这个软件包有一点点的开销。

无论如何,当我遇到这种情况时,我要单独导入列名,并在将它们分配给数据之前将其操作到我想要的位置,或者我根本不读取名称,并手动重置所有variables名称setNames