使用R合并前2行

时间:2019-02-07 09:23:18

标签: 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        Jun             Dec

这里的问题是,前2行是标题,而原始数据集是通过导入excel表格获得的,其中它们合并了一些标题的单元格,而对于其他标题,则合并了2行作为标题。例如类别,正确的标题应该是Cat1和Cat2。

我是否可以通过获取第1行和第2行的第一个非空值来组合前两行? (例如Coalesce(row2,row1)?)例如,对于S / N,由于第二行为空,我们将第一行(即S / N)作为正确的标头。

编辑:随附excel中数据集的图像。以黄色突出显示的行是标题。enter image description here

1 个答案:

答案 0 :(得分:1)

这是您要寻找的吗?

`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      

如果是,这是执行此操作的代码:

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)