我有一个以以下格式从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)作为正确的标头。
答案 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)