我的数据按时间升序排列。这些是与价格相关的货币对。我需要创建一个新的“MtM”列,该列将在货币对为XAU / USD时等于价格。但是,只要货币对与XAU / USD不同,则MtM必须等于货币对等于XAU / USD的最后一个先前价格。

我尝试了滞后,cusum,mutate,但只有在一种观察结果中货币不同于XAU / USD的情况下,我才能够解决这种情况。如果货币不同于XAU / USD时,如果有多个连续的行,则无法解决。

Currency <- c("XAU/USD", "XAU/USD", "XAU/GBP","XAU/USD","XAU/EUR","XAU/GBP","XAU/USD")
Price <- c(1297, 1296, 1007, 1295, 1005,1004,1298)
df <- data.frame(Currency, Price)

我需要得到
MtM <- c(1297, 1296, 1296, 1295, 1295,1295,1298)
df <- data.frame(Currency, Price, MtM)

最佳答案

这是使用dplyrtidyr的方法-

df %>%
  mutate(
    MtM = ifelse(Currency == "XAU/USD", Price, NA_real_)
  ) %>%
  fill(MtM)

  Currency Price  MtM
1  XAU/USD  1297 1297
2  XAU/USD  1296 1296
3  XAU/GBP  1007 1296
4  XAU/USD  1295 1295
5  XAU/EUR  1005 1295
6  XAU/GBP  1004 1295
7  XAU/USD  1298 1298

08-24 14:53