如何将NA值设置为R数据帧中相同分组内的其他行值

  • 本文关键字:其他 数据帧 NA 设置 r dataframe
  • 更新时间 :
  • 英文 :


我有一个数据帧,其中包含按物料、客户、公司代码和STOCK_UOM分组的零件。每个财政年度都有一个WAP(加权平均价格(的相关列。2022财政年度应在WAP列中具有WAP_2021(及相关类型(的值。2023财政年度应在WAP列中具有WAP_2022(及相关类型(的值。但如果FiscalYear是2023,则WAP_2022可能有NA值,在这种情况下,它应该给出上一年的值WAP(WAP_2021(。

公司代码STOCK_UOMWAP_2021<1010><2022>13.1<1010>2023NA
材料 客户 会计年度
1234 Cl1EAWAP 2021
1234 Cl1EANAWAP 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会计年度,我们只需选择不仅是NAs和mergeit且为空的列,即可全局获得相同的names。我们rbind的结果。最后我们zoo::na.locfWAP专栏。

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

最新更新