如何在一个数据框中找出行的差异?

时间:2017-11-05 23:40:22

标签: r

我有这样的股票价格。

dt = read.table(text="
Date  Close
1    3-Nov-17 172.50
2    2-Nov-17 168.11
3    1-Nov-17 166.89
4   31-Oct-17 169.04
5   30-Oct-17 166.72
6   27-Oct-17 163.05
7   26-Oct-17 157.41
8   25-Oct-17 156.41
9   24-Oct-17 157.10
10  23-Oct-17 156.17
11  20-Oct-17 156.25
12  19-Oct-17 155.98
13  18-Oct-17 159.76
14  17-Oct-17 160.47
15  16-Oct-17 159.88
16  13-Oct-17 156.99
17  12-Oct-17 156.00
18  11-Oct-17 156.55
19  10-Oct-17 155.90
20   9-Oct-17 155.84
")

我试图找到行之间的差异,我得到一些非常奇怪的结果。

我尝试了以下内容。

diff <- df$Close <- c(0, diff(df$Close))

所以,172.50美元 - 168.11美元= 4.39美元,而不是 - 4.39美元

和此:

table <- addGroups %>%
  group_by(Group) %>%
  mutate(Close = Close - lag(Close, default = 0))

在Excel中,它看起来像这样:

enter image description here

这就是我想要实现的目标。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

使用lead中的dplyr函数的解决方案。

library(dplyr)

dt2 <- dt %>%
  mutate(Diff = Close - lead(Close))

dt2
#         Date  Close  Diff
# 1   3-Nov-17 172.50  4.39
# 2   2-Nov-17 168.11  1.22
# 3   1-Nov-17 166.89 -2.15
# 4  31-Oct-17 169.04  2.32
# 5  30-Oct-17 166.72  3.67
# 6  27-Oct-17 163.05  5.64
# 7  26-Oct-17 157.41  1.00
# 8  25-Oct-17 156.41 -0.69
# 9  24-Oct-17 157.10  0.93
# 10 23-Oct-17 156.17 -0.08
# 11 20-Oct-17 156.25  0.27
# 12 19-Oct-17 155.98 -3.78
# 13 18-Oct-17 159.76 -0.71
# 14 17-Oct-17 160.47  0.59
# 15 16-Oct-17 159.88  2.89
# 16 13-Oct-17 156.99  0.99
# 17 12-Oct-17 156.00 -0.55
# 18 11-Oct-17 156.55  0.65
# 19 10-Oct-17 155.90  0.06
# 20  9-Oct-17 155.84    NA