2

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

xiao蜗牛
85 声望20 粉丝

{name: 'Xiao蜗牛',


引用和评论

0 条评论