تغییرات فروش در بازههای زمانی معمولا یکی از شاخصهایی است که همیشه توسط کسب و کارها دنبال میشود. فرمول محاسبه نرخ تغییرات فروش ساده است:
													مشخص است که اگر عدد حاصل از فرمول بالا را در ۱۰۰ ضرب کنیم، درصد تغییرات فروش را محاسبه کردهایم. برای این کار میتوانیم از دستورات lead و lag در کتابخانه dplyr استفاده کنیم.
نحوه عملکرد lead و lag
این دو تابع  عملکردی ساده دارند. lead مقدار بعدی و lag مقدار قبلی را در یک بردار پیدا میکند. فرض کنید برداری دارید که اعداد ۱ تا ۵ را در آن ذخیره کردهاید. عملکرد توابع مورد نظر بصورت زیر خواهد بود:
				
					library(dplyr)
v <- 1:5
lead(v) 
				
			
		
				
					[1]  2  3  4  5 NA 
				
			
		ملاحظه میکنید که پاسخ، یک بردار است که از مقدار ۲ آغاز شده و به NA ختم شده است. مقدار آخر به این دلیل NA شده است که پس از عدد ۵ در بردار v مقدار دیگری نداریم. حتما میتوانید حدس بزنید که به همان دلیل پیشین اگر تابع lag را روی بردار v  اعمال کنیم اولین مقدار آن NA خواهد بود.
				
					> lag(v)
[1] NA  1  2  3  4 
				
			
		پاسخ توابع lead و lag همیشه به اندازه بردار اصلی هستند. برای اینکه بهتر نحوه کارکرد این دو تابع را درک کنید به مثال زیر توجه کنید.
				
					library(dplyr)
v = 1:5
data.frame(
    before = lag(v),
    actual = v,
    after = lead(v)
      ) 
				
			
		
				
					.  before actual after
1     NA   1     2
2      1   2     3
3      2   3     4
4      3   4     5
5      4   5    NA 
				
			
		محاسبه نرخ تغییر فروش ماهانه
فرض کنید میزان فروش ماهانه یک شرکت در ۶ ماه اول سال بصورت زیر است.
				
					data <- data.frame(
  monthID = 1:6,
  month = month.abb[1:6],
  sales = c(90e3,12.7e4,10e4,92e3,16e4,16.9e4)
    )
data 
				
			
		
				
					.  monthID month  sales
1       1   Jan  90000
2       2   Feb 127000
3       3   Mar 100000
4       4   Apr  92000
5       5   May 160000
6       6   Jun 169000 
				
			
		برای محاسبه درصد میزان رشد (یا کاهش) فروش ماهانه کافی است ستونی جدید درست کنیم که حاصل تفریق ماه جاری از فروش ماه قبل، تقسیم بر میزان فروش ماه قبل باشد.
				
					library(dplyr)
data %>%
  mutate(
    sales_change_percent = ((sales - lag(sales)) / lag(sales) * 100)
    )
 
				
			
		
				
					.  monthID month  sales sales_change_percent
1       1   Jan  90000                   NA
2       2   Feb 127000             41.11111
3       3   Mar 100000            -21.25984
4       4   Apr  92000             -8.00000
5       5   May 160000             73.91304
6       6   Jun 169000              5.62500 
				
			
		میتوانید با استفاده از تابع round مقدار درصد محاسبه شده را به عدد صحیح رند کنید.
				
					data %>%
  mutate(
    sales_change_percent = round(((sales - lag(sales)) / lag(sales) * 100))
    ) 
				
			
		
				
					.  monthID month  sales sales_change_percent
1       1   Jan  90000                   NA
2       2   Feb 127000                   41
3       3   Mar 100000                  -21
4       4   Apr  92000                   -8
5       5   May 160000                   74
6       6   Jun 169000                    6 
				
			
		
								
								
                
2 پاسخ
با سپاس، توضیحات کامل و بسیار روشن بود
چقدر ساده و روان. ممنونم واقعا. خیلی بدرد من خورد.