2016-10-11 18 views
0

我的預測與移動假期不完全一致。我想找到一個快速解決方案:爲r中的某些行突變導致或滯後的列

這裏是我的數據幀的結構:

df1: 
Date   City   Visitors  WKN WKN_2015 Holiday 
2016-11-06 New York  40000   45  46   No_Holiday 
2016-11-13 New York  50000   46  47   No_Holiday 
2016-11-20 New York  50000   47  48   Thanksgiving 
2016-11-27 New York  100000  48  49   Cyber_Monday 
2016-12-04 New York  100000  49  50   No_Holiday 
2016-12-11 New York  70000   50  51   No_Holiday 
. 
. 
. 
2017-11-23 New York  120000  47  47   Thanksgiving 

一般來說,你將有更多城市的遊客在感恩節和網絡星期一。但我的預測並沒有反映這一點。現在我想速戰速決,像這樣一些事情:

df1: 
Date   City   Visitors  WKN WKN_2015 Holiday  New_Visitors 
2016-11-06 New York  40000   45  46   No_Holiday  40000 
2016-11-13 New York  50000   46  47   No_Holiday  50000  
2016-11-20 New York  50000   47  48   Thanksgiving 100000 
2016-11-27 New York  100000  48  49   Cyber_Monday 100000 
2016-12-04 New York  100000  49  50   No_Holiday  70000 
2016-12-11 New York  70000   50  51   No_Holiday  70000 
. 
. 
. 
2017-11-23 New York  120000  47  47   Thanksgiving 120000 

如果你看到上面的數據的新卷只改變過感恩節,網絡星期一,一週網絡星期一之後。 有沒有什麼辦法可以自動執行此操作,因爲數據會持續到2017年等等。

我正在考慮快速修復,直到我開發出適合移動節假日的預測。任何人都可以將我指向正確的方向嗎?

我已經試過這樣的事情,但是,這並不工作,因爲我需要的只有3周滯後/超前:

df1 <- 
df1 %>% 
mutate(New_Visitors = ifelse(Holiday == "Thanksgiving", lag(Visitors, (WKN - WKN_2015), Visitors) 

邏輯:每年查找的感恩節,看看WKN的比賽。如果不這樣做,那麼根據WKN之間的差異,從感恩節開始爲未來3周調整訪客。如果WKN-WKN_2015 == -1然後通過1接下來的3行帶領遊客如果WKN-WKN_2015 == 1然後通過1滯後遊客明年3行

數據
df1 <- structure(list(Date = c("2016-11-06", "2016-11-13", "2016-11-20", 
"2016-11-27", "2016-12-04", "2016-12-11", "2017-11-23"), City = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L), .Label = "New York", class = "factor"), 
    Visitors = c(40000L, 50000L, 50000L, 100000L, 100000L, 70000L, 
    120000L), WKN = c(45L, 46L, 47L, 48L, 49L, 50L, 47L), WKN_2015 = c(46L, 
    47L, 48L, 49L, 50L, 51L, 47L), Holiday = structure(c(2L, 
    2L, 3L, 1L, 2L, 2L, 3L), .Label = c("Cyber_Monday", "No_Holiday", 
    "Thanksgiving"), class = "factor")), .Names = c("Date", "City", 
"Visitors", "WKN", "WKN_2015", "Holiday"), row.names = c(NA, 
7L), class = "data.frame") 
+0

並不真正瞭解你的預測是這樣做的,但你可以用'%<>'%(往復式管道)說'DF1 <- df1 %>%發生變異(...)'作爲'df1%<>%mutate(...)' – Nate

+0

@NathanDay每年查找感恩節,看看WKN的匹配。如果不這樣做,那麼根據WKN之間的差異,從感恩節開始調整接下來的3周。如果WKN-WKN_2015 == -1,則將訪客引導1,如果WKN-WKN_2015 == 1則將訪客滯後3行。 –

+0

'value'和'Volume'從哪裏來? – Nate

回答

1

您在只有三興趣每年一週,您可以計算「感恩節」行中的滯後值。我不認爲dplyr是需要做到這一點。

​​
> df1 # this method treats the three weeks as a unit, so made two NA rows in the example data) 
     Date  City Visitors WKN WKN_2015  Holiday New_Visitors 
1 2016-11-06 New York 40000 45  46 No_Holiday  40000 
2 2016-11-13 New York 50000 46  47 No_Holiday  50000 
3 2016-11-20 New York 50000 47  48 Thanksgiving  100000 
4 2016-11-27 New York 100000 48  49 Cyber_Monday  100000 
5 2016-12-04 New York 100000 49  50 No_Holiday  70000 
6 2016-12-11 New York 70000 50  51 No_Holiday  70000 
7 2017-11-23 New York 120000 47  47 Thanksgiving  120000 
8  <NA>  <NA>  NA NA  NA   <NA>   NA 
9  <NA>  <NA>  NA NA  NA   <NA>   NA