根据使用 Dplyr 减少或增加数字来查找差异

Finding the differences depending if a number is decreased or increased with 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

我想根据用户目前拥有的硬币数量来总结使用dplyr使用和获得的硬币总数。

预期结果:

> df
User    Coins_Gained    Coins_Used
 1           0              50
 2          50               0
 3         150             250

我尝试使用 lag() 但没有将硬币的使用和收益分开。 我想不出 eloquent 解决方案,如有任何帮助,我们将不胜感激。

这是一种方法:

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

如果您想使用 data.table 进行探索,这里有一种方法。在这里,我使用与@docendo discimus 类似的策略,并使用 shiftdata.table 中的新函数)

 library(data.table) #data.table_1.9.5
 setDT(df)[,{tmp=Current_Coins-shift(Current_Coins)
       list( Coins_gained=sum(tmp[tmp>0], na.rm=TRUE),
      Coins_Used=abs(sum(tmp[tmp<0], na.rm=TRUE)))} , User]
 #   User Coins_gained Coins_Used
 #1:    1            0         50
 #2:    2           50          0
 #3:    3          150        250