给定此数据帧:
library(tidyverse)
library(openxlsx)
df.1 <- tribble(
~customer ,~period, ~cost1, ~cost2 , ~prod,
'cust1', '202201', 5, 10, 'online',
'cust1', '202202', 5, 10, 'online',
'cust1', '202203', 5, 10, 'in-person',
'cust1', '202204', 5, 10, 'in-person',
'cust2', '202203', 5, 10,'online',
'cust2', '202204', 5, 10, 'in-person',
'cust2', '202202', 5, 10,'online',
'cust3', '202204', 5, 10,'online'
'cust4', '202101', NA, NA, 'online',
'cust4', '202102', NA,10, 'online'
)
我正在try for each 客户创建一个Excel文件,并基于变量prod
动态添加选项卡,其中一些文件可能有一个选项卡,而另一些文件可能有多个选项卡,这取决于他们有多少产品.
我还想删除所有值都是NA
的任何列,因此在这个简单的示例中,cust4的文件不会有列cost1
.
以下是我try 过的方法.它似乎按客户和产品拆分文件,但它没有- for each 客户创建一个文件,并且它不会删除所有值为NA的列
list(tab1 = df.1) %>%
map(\(df) split(df, list(df.1$customer, df.1$prod), drop =T)) %>%
janitor::remove_empty(., which = 'cols') %>%
iwalk(\(df, nm) write.xlsx(df, paste0(nm, ".xlsx"), startRow = 6))
我怎样才能做到这一点呢?我希望有4个文件,每个产品都有一个标签,在客户4‘S的情况下只有4列,而不是5列