代码之家  ›  专栏  ›  技术社区  ›  Andrew Bannerman

滚动减法到列[重复]

r
  •  1
  • Andrew Bannerman  · 技术社区  · 8 年前

    这里的目标是从值列的第1行中减去第2行…并将其向下滚动到data.frame

    Excel只是=总和(B2-B1)

        Date    Value       Diff
    1   19280103    17.76   NA
    2   19280104    17.72   -0.04
    3   19280105    17.55   -0.17
    4   19280106    17.66   0.11
    5   19280107    17.68   0.02
    6   19280109    17.5    -0.18
    7   19280110    17.37   -0.13
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Kozolovska    8 年前

    使用dplyr很容易,您可以使用滞后函数。

    > library('dplyr')
    > x <- c(1,3,5,6,7,8,9,10,5,4)
    > y <- 1:length(x)
    > 
    > dt <- data.frame('x' = x, 'y' = y)
    > 
    > dt %>% mutate(diffx = x - lag(x, 1), diffy = y - lag(y, 1))
        x  y diffx diffy
    1   1  1    NA    NA
    2   3  2     2     1
    3   5  3     2     1
    4   6  4     1     1
    5   7  5     1     1
    6   8  6     1     1
    7   9  7     1     1
    8  10  8     1     1
    9   5  9    -5     1
    10  4 10    -1     1  
    

    你也可以这样做:

    > cbind(dt, 'diffx' = c(NA, diff(x)), 'diffy' = c(NA, diff(y)))
        x  y diffx diffy
    1   1  1    NA    NA
    2   3  2     2     1
    3   5  3     2     1
    4   6  4     1     1
    5   7  5     1     1
    6   8  6     1     1
    7   9  7     1     1
    8  10  8     1     1
    9   5  9    -5     1
    10  4 10    -1     1