以下数据为雷克萨斯、卡罗拉的某口碑文章的阅读量,READNUM为文章的累计阅读量;现在我们想求取文章每天的净阅读量,即阅读量增量。
例如:2016/11/17,雷克萨斯对应口碑文章的阅读量为:48406 - 48400 = 6.
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,求取相邻两位的增量;首位(第一天)用其余增量的均值替代
# 自定义滚动求增量函数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
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。