当前位置:  开发笔记 > 编程语言 > 正文

计算之前未发生的新值,而不是在最后一组中发生的值

如何解决《计算之前未发生的新值,而不是在最后一组中发生的值》经验,为你挑选了1个好方法。



1> David Arenbu..:

这是一次尝试(代码正文中的解释)

dt %>%
  group_by(user) %>%
  mutate(Count = row_number()) %>% # Count appearances per user
  group_by(mth) %>%
  mutate(new = sum(Count == 1)) %>% # Count first appearances per months
  summarise(new = first(new), # Summarise new users per month (for cumsum)
            users = list(unique(user))) %>% # Create a list of unique users per month (for notLastMonth)
  mutate(totNew = cumsum(new), # Calculate overall cummulative sum of unique users
         notLastMonth = lengths(Map(setdiff, users, lag(users)))) %>% # Compare new users to previous month
  select(-users) %>%
  right_join(dt) # Join back to the real data

# A tibble: 9 × 6
#       mth   new totNew notLastMonth       date   user
#                     
# 1 2010-01     2      2            2 2010-01-10    123
# 2 2010-01     2      2            2 2010-01-11    123
# 3 2010-01     2      2            2 2010-01-12    180
# 4 2010-02     2      4            2 2010-02-13    129
# 5 2010-02     2      4            2 2010-02-14    129
# 6 2010-02     2      4            2 2010-02-14    184
# 7 2010-03     1      5            2 2010-03-22    145
# 8 2010-03     1      5            2 2010-03-23    180
# 9 2010-03     1      5            2 2010-03-24    145

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有