如下數據爲雷克薩斯、卡羅拉的某口碑文章的閱讀量,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