根据Dplyr减少或增加数量,找出差异

ant*_*ant 4 r dplyr

> df
Date      User  Current_Coins
01/01      1     150
01/02      1     100
01/01      2     100
01/02      2     150
01/01      3     100
01/02      3     150
01/03      3     100
01/04      3     200
01/04      3       0
Run Code Online (Sandbox Code Playgroud)

根据用户当前拥有多少硬币,我想总结使用dplyr使用和获得的硬币总和.

预期结果:

> df
User    Coins_Gained    Coins_Used
 1           0              50
 2          50               0
 3         150             250
Run Code Online (Sandbox Code Playgroud)

我尝试使用lag()但不分开硬币的使用和收益.我想不出一个雄辩的解决方案,任何帮助将不胜感激.

tal*_*lat 6

这是一种方法:

library(dplyr)
df %>% 
  group_by(User) %>% 
  mutate(x = Current_Coins - lag(Current_Coins)) %>%        # compute the differences
  summarise(Coin_gained = sum(x[x>0], na.rm = TRUE),        # sum up positives
            Coin_used = abs(sum(x[x<0], na.rm = TRUE)))     # sum up negatives

#Source: local data frame [3 x 3]
#
#  User Coin_gained Coin_used
#1    1           0        50
#2    2          50         0
#3    3         150       250
Run Code Online (Sandbox Code Playgroud)