利用R语言实现阅读量的增量计算

以下数据为雷克萨斯、卡罗拉的某口碑文章的阅读量,READNUM为文章的累计阅读量;现在我们想求取文章每天的净阅读量,即阅读量增量。
例如:2016/11/17,雷克萨斯对应口碑文章的阅读量为:48406 - 48400 = 6.

BRANDDOC_IDDATEREADNUM
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/1548388
卡罗拉k.autohome.com.cn/spec/24016/2016/11/15106263
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/1648400
卡罗拉k.autohome.com.cn/spec/24016/2016/11/16106274
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/1748406
卡罗拉k.autohome.com.cn/spec/24016/2016/11/17106288
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/1848412
卡罗拉k.autohome.com.cn/spec/24016/2016/11/18106296
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/1948424
卡罗拉k.autohome.com.cn/spec/24016/2016/11/19106303
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/2048432
卡罗拉k.autohome.com.cn/spec/24016/2016/11/20106315
雷克萨斯k.autohome.com.cn/spec/22277/2016/11/2148446
卡罗拉k.autohome.com.cn/spec/24016/2016/11/21106324

首先我们读取阅读量数据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                                               
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值