当R中的行少一行时,使用diff()函数添加新列

lg9*_*929 2 diff r

如果我有像mtcars这样的示例数据框,并且我想找到所有行的mtcars $ qsec之间的差异,我可以做diff(mtcars $ qsec).但有没有一种简单的方法可以使diff(mtcars $ qsec)成为原始mtcars数据框中的新列?我发现它很困难,因为diff(mtcars $ qsec)中的行少于其他mtcars.

> head(mtcars,3)

               mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4     21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag 21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710    22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Run Code Online (Sandbox Code Playgroud)

G. *_*eck 5

这有两种方法.两者都放在NA第一行diff_qsec并放入diff(qsec)剩余的行:

library(dplyr)  
mtcars %>% mutate(diff_qsec = qsec - lag(qsec)) # dplyr has its own version of lag

transform(mtcars, diff_qsec = c(NA, diff(qsec)))
Run Code Online (Sandbox Code Playgroud)

另外,关于填充的一般问题请参阅:如何从前面填充带有NA的向量?