使用R合并前两行
我有一个从excel导入的数据集,格式如下使用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
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)