2016-01-05 29 views
0

我有一個R中的數據框,我必須運行保留報告。我需要運行df銷售月份年的序列/子集的保留公式。將公式應用於R中的可變時間序列

Sale_date, Cancel_date, days_to_cancel, sale_month; 

2015-01-01, 2015-04-06, 95,    2015-01; 
2015-04-01,   , NA,    2015-04; 
2015-10-31, 2015-11-02, 3,    2015-10; 
2013-05-20, 2014-05-20, 365,    2013-05; 

我已經格式化了會員銷售日期和取消日期的列as.Date。我還創建了一個新的列df $ days_to_cancellation as.numeric,給我取消會員所需的天數(取消日期 - 銷售日期,na.strings = NA)和sale_month列,以便更容易序列。我使用公式計算保留百分比: (1-(x_days_Cancel_rate))其中x可以是15,30,60,90,120等...天

例如,要計算會員資格的60天保留期在10月份出售我會用:

October_Retention<-1-(sum(df$sale_date>="2015-10-01"&df$sale_date<"2015-11-01"&df$days_to_cancel<=60,na.rm=T)/sum(df$sale_date>="2015-10-01"&df$sale_date<"2015-11-01") 

它正確地提供了60天的會員資格保留在十月出售。

我的問題是,除了手動爲每個月和每個X天變量創建一個Month * _Retention對象,還有另一種告訴R運行1月至12月的公式的另一種方式30- 60-90例如-120天保留?我需要一種方法告訴R運行每個銷售月和每個變量x天的公式。

我一直在excel中運行這個特定的報告多年,我可能只是以錯誤的方式來處理這個問題。連接是什麼,我想在河

完成

任何和所有的投入,將不勝感激

retention graph

+0

請使用適當的格式化佈局選項以提高可讀性。 – SaeX

+0

而不是做那個痛苦的雙重邏輯測試,用'cut.date'使用by =「1 month」是不是更容易做一個變量?然後你將有一個分類變量傳遞給聚合類型的函數。您也可以在幾天內使用「剪切」來取消,然後使用兩者的「交互」。請不要進入構建命名對象的副本的SAS/SPSS/BASIC兔子洞。 –

+0

非常感謝,看起來像cut.Date做到了。 – Rick

回答

0

使用dplyr,你可以得到每月費率如下圖像:

library(dplyr) 
report <- df %>% 
    group_by(sale_month) %>% 
    summarise(retention30 = round(sum(is.na(days_to_cancel) | days_to_cancel > 30)/n() * 100, 1), 
      rentention60 = round(sum(is.na(days_to_cancel) | days_to_cancel > 60)/n() * 100, 1)) 

在這種情況下,我在每個保留期內都不處理取消。您可以在這方面修改標準以滿足您的要求。