【发布时间】:2020-10-15 21:19:10
【问题描述】:
我正在寻找一个 purrr 解决方案来完成我使用 for 循环所做的事情。我怀疑它将是 map2 或 pmap 的一个版本。我查看了文档,提供的简单案例很有意义,但我无法弄清楚如何将其用于我的案例。
在下面的数据框中,“总和”列包含给定 SKU 的月度预测。 “结束”列包含给定月份的月底日期。我应用的规则是,如果年份(列末尾的最后两位数字)大于 22,我将给定月份/SKU 的 Sum 列中的相应值替换为 0。我目前使用的代码(其中作品)在下面。
sample.data.frame <- data.frame(SKU = c('ABC', 'DEF', 'GHI'),
'Sum Month 01' = c(3, 9, 8), 'Sum Month 02' = c(5, 10, 4),
'Sum Month 03' = c(9, 6, 5), 'Sum Month 04' = c(5, 9, 10),
'End of Month 01' = rep('10/28/22', 3),
'End of Month 02' = rep('12/02/22', 3),
'End of Month 03' = rep('12/30/22', 3),
'End of Month 04' = rep('01/27/23', 3), check.names = F)
for (i in seq_along(sample.data.frame[grepl("Sum Month", colnames(sample.data.frame))])){
if (substr(sample.data.frame[grepl("End of", colnames(sample.data.frame))][[i]][[1]], 7, 8) > 22){
sample.data.frame[grepl("Sum Month", colnames(sample.data.frame))][[i]] <- 0
}
}
此外,我根据上面的代码编写了以下函数,该函数适用于日期向量和数字向量。我不知道如何使它适用于日期和数字的多个向量(例如,数据框的各个列)。
data.replace.fcn <- function(date.col, number.col){
for (i in seq_along(date.col)) {
if (substr(date.col[i], 7, 8) > 22) {
number.col[i] <- 0
} else {
number.col[i] <- number.col[i]
}
}
return(number.col)
}
提前感谢您的帮助。
【问题讨论】: