我有一个数据帧,其中包含按物料、客户、公司代码和STOCK_UOM分组的零件。每个财政年度都有一个WAP(加权平均价格(的相关列。2022财政年度应在WAP列中具有WAP_2021(及相关类型(的值。2023财政年度应在WAP列中具有WAP_2022(及相关类型(的值。但如果FiscalYear是2023,则WAP_2022可能有NA值,在这种情况下,它应该给出上一年的值WAP(WAP_2021(。
材料 |
| 公司代码STOCK_UOM会计年度 | WAP_2021|||
---|---|---|---|---|---|
1234 | Cl1 | <1010>EA | <2022>13.1WAP 2021 | ||
1234 | Cl1 | <1010>EA | 2023NA | NAWAP 2022 |
您可以首先从names
、中删除年份
names(dat) <- gsub('_\d{4}', '', names(dat))
并创建一个具有unique
名称和零行的空白,我们希望稍后使用它merge
blank <- matrix(, nrow=0, ncol=length(unique(names(dat))),
dimnames=list(NULL, unique(names(dat))))
接下来,在by
会计年度,我们只需选择不仅是NA
s和merge
it且为空的列,即可全局获得相同的names
。我们rbind
的结果。最后我们zoo::na.locf
WAP专栏。
by(dat, dat$FiscalYear, (x) x[colSums(is.na(x)) == 0]) |>
lapply(merge, blank, all=TRUE) |>
do.call(what=rbind) |>
transform(WAP=zoo::na.locf(WAP))
# Material Client CompanyCode STOCK_UOM FiscalYear WAP WAP_Type
# 2022 1234 Cl1 1010 EA 2022 13.1 WAP 2021
# 2023 1234 Cl1 1010 EA 2023 13.1 WAP 2022