使用R合并前两行

使用R合并前两行,r,R,我有一个从excel导入的数据集,格式如下 S/N Category Test Cat1 Cat2 test1 test2 Quantity Start_Month End_Month 1 A C T1 T2 1 Feb March 2 B D T2 T3 4

我有一个从excel导入的数据集,格式如下

S/N   Category         Test    
      Cat1     Cat2    test1   test2    Quantity   Start_Month    End_Month
 1     A        C        T1      T2        1        Feb             March
 2     B        D        T2      T3        4        Jun             Dec
这里的问题是,前两行是标题,原始数据集是通过导入excel工作表获得的,在excel工作表中,它们合并了某些标题的单元格,而对于其他标题,它有两行作为标题。例如,正确的标题应为Cat1和Cat2

有没有办法通过获取第1行和第2行的第一个非空值来组合前2行?(如Coalesce(第2行,第1行)?)例如,对于序列号,由于第二行为空,我们将第一行(即序列号)作为正确的标题


编辑:excel中数据集的图像如附件所示。以黄色突出显示的行是标题

这就是你要找的吗

`S/N` Category_Cat1 Category_Cat2 Test_Test1 Test_Test2 Quantity Start_Month End_Month
  <chr> <chr>         <chr>         <chr>      <chr>      <chr>    <chr>       <chr>    
1 1     A             C             T1         T2         1        Feb         Mar      
2 2     B             D             T2         T3         4        Jun         Dec      

请提供一个可复制的示例(
dput(head(df))
)谢谢!这正是我所要寻找的,作为旁注,下面的代码可以被修改以读取xlsx中的多页吗?当然可以
read.xlsx
函数具有
sheet
参数,因此您可以在所有工作表中循环并应用此代码。
library(tidyverse)
library(unpivotr)
library(openxlsx)

read.xlsx('FILE_NAME.xlsx', colNames = FALSE) %>%
  as_cells() %>%
  behead('N', 'H1') %>%
  behead('N', 'H2') %>%
  mutate(tmp = str_remove(H2, '\\d')) %>%
  group_by(tmp) %>%
  fill(H1, .direction = 'up') %>%
  fill(H1, .direction = 'down') %>%
  mutate(
    H1 = replace_na(H1, ''),
    H2 = replace_na(H2, ''),
    H = str_c(H1, H2, sep = '_') %>% str_remove('^_|_$')
  ) %>%
  ungroup() %>%
  mutate(H = H %>% fct_reorder(col)) %>%
  select(H, row, chr) %>%
  spread(H, chr) %>%
  select(-row)