我的数据按时间升序排列。这些是与价格相关的货币对。我需要创建一个新的“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)
最佳答案
这是使用dplyr
和tidyr
的方法-
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