如下数据为雷克萨斯、卡罗拉的某口碑文章的阅读量,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