按组从上一行减去值

在R中,假设我有以下数据框:


Data

id      date        value

2380    10/30/12    21.01

2380    10/31/12    22.04

2380    11/1/12     22.65

2380    11/2/12     23.11

20100   10/30/12    35.21

20100   10/31/12    37.07

20100   11/1/12     38.17

20100   11/2/12     38.97

20103   10/30/12    57.98

20103   10/31/12    60.83 

我想按组ID日期从当前值中减去先前的值,以创建此值:


id      date        value   diff

2380    10/30/12    21.01   0

2380    10/31/12    22.04   1.03

2380    11/1/12     22.65   0.61

2380    11/2/12     23.11   0.46

20100   10/30/12    35.21   0

20100   10/31/12    37.07   1.86

20100   11/1/12     38.17   1.1

20100   11/2/12     38.97   0.8

20103   10/30/12    57.98   0

20103   10/31/12    60.83   2.85


慕桂英3389331
浏览 656回答 2
2回答

阿晨1998

与dplyr:library(dplyr)data %>%&nbsp; &nbsp; group_by(id) %>%&nbsp; &nbsp; arrange(date) %>%&nbsp; &nbsp; mutate(diff = value - lag(value, default = first(value)))为了清楚起见,你可以arrange通过date和分组列(根据评论的律师)data %>%&nbsp; &nbsp; group_by(id) %>%&nbsp; &nbsp; arrange(date, .by_group = TRUE) %>%&nbsp; &nbsp; mutate(diff = value - lag(value, default = first(value)))或lag搭配order_by:data %>%&nbsp; &nbsp; group_by(id) %>%&nbsp; &nbsp; mutate(diff = value - lag(value, default = first(value), order_by = date))与data.table:library(data.table)dt <- as.data.table(data)setkey(dt, id, date)dt[, diff := value - shift(value, fill = first(value)), by = id]
打开App,查看更多内容
随时随地看视频慕课网APP