利用R語言實現閱讀量的增量計算

如下數據爲雷克薩斯、卡羅拉的某口碑文章的閱讀量,READNUM爲文章的累計閱讀量;如今咱們想求取文章天天的淨閱讀量,即閱讀量增量。
例如:2016/11/17,雷克薩斯對應口碑文章的閱讀量爲:48406 - 48400 = 6.app

BRAND DOC_ID DATE READNUM
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/15 48388
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/15 106263
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/16 48400
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/16 106274
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/17 48406
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/17 106288
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/18 48412
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/18 106296
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/19 48424
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/19 106303
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/20 48432
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/20 106315
雷克薩斯 k.autohome.com.cn/spec/22277/ 2016/11/21 48446
卡羅拉 k.autohome.com.cn/spec/24016/ 2016/11/21 106324

首先咱們讀取閱讀量數據brand_readnum函數

# 加載xlsx包
tryCatch(
{library(xlsx)},
error = function(err) {install.packages("xlsx")},
finally = {library(xlsx)}
)
# 加載dplyr包
tryCatch(
{library(dplyr)},
error = function(err) {install.packages("dplyr")},
finally = {library(dplyr)}
)
# 讀取閱讀量brand_readnum數據
brand_readnum <- read.xlsx(file = "F:/brand_readnum.xlsx", sheetIndex = 1, encoding = "UTF-8", stringsAsFactors = FALSE)
brand_readnum
      BRAND                        DOC_ID       DATE READNUM
1  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-15   48388
2    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-15  106263
3  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-16   48400
4    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-16  106274
5  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-17   48406
6    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-17  106288
7  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-18   48412
8    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-18  106296
9  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-19   48424
10   卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-19  106303
11 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-20   48432
12   卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-20  106315
13 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-21   48446
14   卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-21  106324

其次,將數據按BRAND,DOC_ID,DATE進行排序(順序)測試

brand_readnum_arrange <- arrange(brand_readnum, BRAND, DOC_ID, DATE)
brand_readnum_arrage
      BRAND                        DOC_ID       DATE READNUM
1    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-15  106263
2    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-16  106274
3    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-17  106288
4    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-18  106296
5    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-19  106303
6    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-20  106315
7    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-21  106324
8  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-15   48388
9  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-16   48400
10 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-17   48406
11 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-18   48412
12 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-19   48424
13 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-20   48432
14 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-21   48446

接下來,定義函數rollingMinus,求取相鄰兩位的增量;首位(第一天)用其他增量的均值替代code

# 自定義滾動求增量函數rollingMinus
rollingMinus <- function(x){
  x.len <- length(x)
  y <- integer(x.len)
# 求增量
  for (i in 2:x.len){
    y[i] <- x[i] - x[i-1]
  }
# 首位用其他所求的增量的均值替代
  y[1] <- ceiling(mean(y[-1]))
  return(y)
}
# 測試一下rollingMinus函數
test <- 1:10
rollingMinus(test)
[1] 1 1 1 1 1 1 1 1 1 1

最後,咱們用tapply函數把rollingMinus函數應用於不一樣品牌(不一樣因子)的累計閱讀量上,求取閱讀量增量ROLLING_READNUM排序

attach(brand_readnum_arrange)
brand_readnum_arrange$ROLLING_READNUM <- unlist(tapply(READNUM, DOC_ID, rollingMinus))
detach(brand_readnum_arrange)
brand_readnum_arrange
      BRAND                        DOC_ID       DATE READNUM ROLLING_READNUM
1    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-15  106263              11
2    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-16  106274              11
3    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-17  106288              14
4    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-18  106296               8
5    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-19  106303               7
6    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-20  106315              12
7    卡羅拉 k.autohome.com.cn/spec/24016/ 2016-11-21  106324               9
8  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-15   48388              10
9  雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-16   48400              12
10 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-17   48406               6
11 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-18   48412               6
12 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-19   48424              12
13 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-20   48432               8
14 雷克薩斯 k.autohome.com.cn/spec/22277/ 2016-11-21   48446              14
相關文章
相關標籤/搜索