gpt4 book ai didi

r - 两组向量上的 for 循环的 purrr 解决方案

转载 作者:行者123 更新时间:2023-12-02 19:10:24 26 4
gpt4 key购买 nike

我正在寻找一个 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)
}

预先感谢您的帮助。

最佳答案

您可以使用 purrr 中的 map2 操作 “Sum Month”“End of” 列成对。

library(dplyr)
library(purrr)

map2_df(select(sample.data.frame, starts_with('Sum Month')),
select(sample.data.frame, starts_with('End of')),
~if_else(substr(.y, 7, 8) > 22, 0, .x))

# `Sum Month 01` `Sum Month 02` `Sum Month 03` `Sum Month 04`
# <dbl> <dbl> <dbl> <dbl>
#1 3 5 9 0
#2 9 10 6 0
#3 8 4 5 0

可以使用 mapply/Map 在 base R 中编写相同的内容:

sum_month <- grep('Sum Month', names(sample.data.frame))
end_month <- grep('End of', names(sample.data.frame))

sample.data.frame[sum_month] <- Map(function(x, y)
ifelse(substr(y, 7, 8) > 22, 0, x),
sample.data.frame[sum_month], sample.data.frame[end_month])

关于r - 两组向量上的 for 循环的 purrr 解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64379811/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com