объединение первых 2 строк с использованием R - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть набор данных, который импортируется из 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.

Есть ли способ объединить первые 2 строки, взяв первое непустое значение строки 1 и строки 2?(например, Coalesce (row2, row1)?) Например, для S / N, поскольку вторая строка пуста, мы возьмем первую строку, то есть S / N, в качестве правильного заголовка.

Редактировать:Изображение набора данных в Excel как в приложении.Строки, которые выделены желтым цветом - это заголовок. enter image description here

1 Ответ

0 голосов
/ 07 февраля 2019

Это то, что вы ищете?

`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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...