在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 

我想从当前值中减go 之前的值,按组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

推荐答案

dplyr人:

library(dplyr)

data %>%
    group_by(id) %>%
    arrange(date) %>%
    mutate(diff = value - lag(value, default = first(value)))

为了清晰起见,您可以使用arrangedate和分组列(按照commentlawyer)

data %>%
    group_by(id) %>%
    arrange(date, .by_group = TRUE) %>%
    mutate(diff = value - lag(value, default = first(value)))

lagorder_by:

data %>%
    group_by(id) %>%
    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]

R相关问答推荐

在' geom_contour_filled()'中对齐两个gplot的 colored颜色 比例

如何在列表的子元素上使用setName

通过R访问MoveApps API

使用tidyverse方法绑定行并从一组管道列表执行左连接

如何将移除事件分配给动态创建的按钮?

R Sapply函数产生的值似乎与for循环方法略有不同

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

在组中添加值增加和减少的行

如何在Chart_Series()中更改轴值的 colored颜色 ?

使用data.table::fcase()而不是dplyr::case_When()时保持值

如何通过判断数据框的一列来压缩另一列?

R spatstat Minkowski Sum()返回多个边界

SHINY:使用JS函数应用的CSS样式显示HTML表格

如何指定我的函数应该查找哪个引用表?

跨列查找多个时间报告

KM估计的差异:SvyKm与带权重的调查

删除数据帧中特定行号之间的每第三行和第四行

防止正则表达式覆盖以前的语句

基于R中的辅助向量中的值有条件地连接向量中的字符串

当由base::限定时,`[.factor`引发NextMethod错误