繁体   English   中英

向下填充滞后值 R

[英]Fill Lagged Values Down R

我正在尝试结合使用条件滞后,然后按组填充值。 在我的数据中,我有 old_price 和 new_price。 new_price 必须始终低于 old_price。 每当 new_price 大于 old_price 时,我想回到 new_price 小于 old_price 的最新值。 在 Raleigh 的情况下,第 2 行和第 3 行应该滞后到 36.00。 第 4 行不应滞后,因为 new_price 已经低于 old_price。 当我尝试使用滞后时,它一直将其应用于第 2 行(价格为 52),但随后将第 3 行保留为 54.00。 我希望第 3 行也落后于第 1 行,或者一旦它具有正确的值就落后于第 2 行。

这是我的数据:

city          sku  month  year  old_price   new_price
Raleigh       001  Dec    2021  45.00        36.00
Raleigh       001  Jan    2022  45.00        52.00
Raleigh       001  Feb    2022  45.00        54.00
Raleigh       001  Mar    2022  45.00        37.00
Austin        002  Dec    2021  37.50        30.00
Austin        002  Jan    2022  37.50        32.00
Austin        002  Feb    2022  37.50        48.00

所需的 output:

city          sku  month  year  old_price   new_price 
Raleigh       001  Dec    2021  45.00        36.00
Raleigh       001  Jan    2022  45.00        36.00
Raleigh       001  Feb    2022  45.00        36.00
Raleigh       001  Mar    2022  45.00        37.00
Austin        002  Dec    2021  37.50        30.00
Austin        002  Jan    2022  37.50        32.00
Austin        002  Feb    2022  37.50        32.00

一种方法是将new_price > old_price的值转换为NA ,然后向下填充。

library(dplyr)
library(tidyr)

df %>% 
  mutate(new_price = if_else(new_price > old_price, NA_real_, new_price)) %>% 
  fill(new_price)

Output:

     city sku month year old_price new_price
1 Raleigh   1   Dec 2021      45.0        36
2 Raleigh   1   Jan 2022      45.0        36
3 Raleigh   1   Feb 2022      45.0        36
4 Raleigh   1   Mar 2022      45.0        37
5  Austin   2   Dec 2021      37.5        30
6  Austin   2   Jan 2022      37.5        32
7  Austin   2   Feb 2022      37.5        32

数据:

df <- read.table(textConnection("city          sku  month  year  old_price   new_price
Raleigh       001  Dec    2021  45.00        36.00
Raleigh       001  Jan    2022  45.00        52.00
Raleigh       001  Feb    2022  45.00        54.00
Raleigh       001  Mar    2022  45.00        37.00
Austin        002  Dec    2021  37.50        30.00
Austin        002  Jan    2022  37.50        32.00
Austin        002  Feb    2022  37.50        48.00"), header = TRUE)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM