2017-12-01 2 views
0

によって実行違いを取る:私は以下のようなデータフレームを持っているグループと複数の列

Date <- as.Date(c('2017-10-16', 
        '2017-10-16', 
        '2017-10-17', 
        '2017-10-17', 
        '2017-10-18', 
        '2017-10-18', 
        '2017-10-19', 
        '2017-10-19', 
        '2017-10-20', 
        '2017-10-20')) 

Source <- as.Date(c('2017-11-29', 
        '2017-11-30', 
        '2017-11-29', 
        '2017-11-30', 
        '2017-11-29', 
        '2017-11-30', 
        '2017-11-29', 
        '2017-11-30', 
        '2017-11-29', 
        '2017-11-30')) 

Revenue <- c(206.88, 
      210.88, 
      194.13, 
      200.13, 
      170.00, 
      170.00, 
      746.65, 
      736.65, 
      772.00, 
      772.00) 

Cost <- c(100.88, 
      10.88, 
      85.13, 
      100.13, 
      170.00, 
      100.00, 
      46.65, 
      50.65, 
      23.00, 
      24.00) 

df <- data.frame(Date, Source, Revenue, Cost) 

DATAFRAME:私は後日で実行中の違いを取ることが、すべての列のためにそれを行うにはどうすればよい

df 
     Date   Source  Revenue  Cost 
1 2017-10-16  2017-11-29  206.88  100.88 
2 2017-10-16  2017-11-30  210.88  10.88 
3 2017-10-17  2017-11-29  194.13  85.13 
4 2017-10-17  2017-11-30  200.13  100.13 
5 2017-10-18  2017-11-29  170.00  170.00 
6 2017-10-18  2017-11-30  170.00  100.00 
7 2017-10-19  2017-11-29  746.65  46.65 
8 2017-10-19  2017-11-30  736.65  50.65 
9 2017-10-20  2017-11-29  772.00  23.00 
10 2017-10-20  2017-11-30  772.00  24.00 

第二?

最終的な結果は次のように見ている必要があります

  Date   Source  Revenue  Cost Revenue_Diff  Cost_Diff ..................... 
1 2017-10-16  2017-11-29  206.88  100.88   NA   NA  ..................... 
2 2017-10-16  2017-11-30  210.88  10.88   4   -90  ..................... 
3 2017-10-17  2017-11-29  194.13  85.13   NA   NA  ..................... 
4 2017-10-17  2017-11-30  200.13  100.13   6   15 ..................... 
5 2017-10-18  2017-11-29  170.00  170.00   NA   NA ..................... 
6 2017-10-18  2017-11-30  170.00  100.00   0   -70 ..................... 
7 2017-10-19  2017-11-29  746.65  46.65   NA   NA ..................... 
8 2017-10-19  2017-11-30  736.65  50.65   -10   4 ..................... 
9 2017-10-20  2017-11-29  772.00  23.00   NA   NA ..................... 
10 2017-10-20  2017-11-30  772.00  24.00   0   1 ..................... 

私の現在のスクリプトは一度に1列を行うことができますが、私はソースの右に全力を尽くすことができるようにしたい:

test<-df %>% 
    group_by(Date) %>% 
    mutate(Revenue_Diff = c(NA, diff(`Revenue`))) 

ご協力いただきありがとうございます!

答えて

1

dplyrを使用する溶液。 mutate_atを使用して操作を行う列を指定できます。 lagは計算の値の位置を変更できます。

library(dplyr) 

df2 <- df %>% 
    group_by(Date) %>% 
    mutate_at(vars(-Source), funs(Diff = . - lag(.))) %>% 
    ungroup() 
df2 

# # A tibble: 10 x 6 
#   Date  Source Revenue Cost Revenue_Diff Cost_Diff 
#  <date>  <date> <dbl> <dbl>  <dbl>  <dbl> 
# 1 2017-10-16 2017-11-29 206.88 100.88   NA  NA 
# 2 2017-10-16 2017-11-30 210.88 10.88   4  -90 
# 3 2017-10-17 2017-11-29 194.13 85.13   NA  NA 
# 4 2017-10-17 2017-11-30 200.13 100.13   6  15 
# 5 2017-10-18 2017-11-29 170.00 170.00   NA  NA 
# 6 2017-10-18 2017-11-30 170.00 100.00   0  -70 
# 7 2017-10-19 2017-11-29 746.65 46.65   NA  NA 
# 8 2017-10-19 2017-11-30 736.65 50.65   -10   4 
# 9 2017-10-20 2017-11-29 772.00 23.00   NA  NA 
# 10 2017-10-20 2017-11-30 772.00 24.00   0   1 
関連する問題