更新每天和主题的总体平均(评论分数)

时间:2018-11-30 15:17:54

标签: r

我有一个包含多个游戏评论的数据集,我想计算每个游戏在相应日期之前的总得分-因此基本上是用户在每一天看到的总得分。

评论是二进制的,所以它只是一个投票/否决系统,其中列中的每个1都表示赞成:

game_id     created     positive
123         2018-07-18  1
123         2018-07-18  0
123         2018-07-18  1
123         2018-07-19  1 
456         2018-06-23  1
456         2018-06-25  1
456         2018-06-25  0
456         2018-06-26  1
789         2018-07-18  1

计算每天的总平均值很容易

group_by(game_id, created) %>% 
    summarise(sum(positive)/n()

但是我在努力如何收录前几天的评论。

我希望它看起来像这样:

game_id     created     total_score
123         2018-07-18  0.66
123         2018-07-19  0.75 
456         2018-06-23  1.0
456         2018-06-25  0.5
456         2018-06-26  0.66
789         2018-07-18  1

我曾考虑过使用循环和if语句的组合,但实际上无法将其表述(并怀疑它对于大型数据集的效率...)

2 个答案:

答案 0 :(得分:1)

这是使用dplyr来实现的一种方法。此处的关键是创建累积和的中间计算,然后将其用于比率:

df %>%
  group_by(game_id, created) %>%
  summarise(pos=sum(positive), tot=n()) %>%
  group_by(game_id) %>%
  mutate(pct = cumsum(pos) / cumsum(tot))

# A tibble: 6 x 5
# Groups:   game_id [3]
  game_id created      pos   tot   pct
    <int> <fct>      <int> <int> <dbl>
1     123 2018-07-18     2     3 0.667
2     123 2018-07-19     1     1 0.75 
3     456 2018-06-23     1     1 1    
4     456 2018-06-25     1     2 0.667
5     456 2018-06-26     1     1 0.75 
6     789 2018-07-18     1     1 1    

答案 1 :(得分:0)

假设您的数据框名为~/Android/Sdk/emulator/emulator -avd Nexus_9_API_23 -dns-server 1.0.2.2,您可以:

df

创建每个library(dplyr) df= arrange(df, game_id,created) ## sort dataset df$csum <- ave(df$positive, df$game_id, FUN=cumsum) ## create cumulative sum 的累积总和。确保您的数据框按game_idgame_id

排序