R:条件差异函数

R: Conditional diff function

我想计算 R 中数据帧变量的行之间的连续差异,与 diff() 函数完全一样,但是,仅在具有相同 ID 号的行之间。

虚拟数据:

id <- c(1,1,1,1,1,1,1,1,2,2,2,2,2,2,2)

t1 <- c(4,3,4,4,5,8,9,11,3,8,9,7,9,10,3)

df <- data.frame(id, t1)

使用 diff(df$t1) 我得到:

-1 1 0 1 3 1 2 -8 5 1 -2 2 1 -7

我愿意:

-1 1 0 1 3 1 NA -8 5 1 -2 2 1 -7

我也试过:

df%>%
  group_by(id)%>%
  diff(df$t1)

但是我得到错误:

Error in diff.default(., df$t1) : 'lag' and 'differences' must be integers >= 1

有什么想法吗?

如果您使用 dplyr,则需要将 diff() 移动到 mutate() 语句中。但是 diff() returns 一个比输入向量短 1 的向量,这使得很难保持相同的行数。另一种方法是使用 dplyr lead() 函数来获取组中的“下一个”值

df%>%
  group_by(id)%>%
  mutate(diff=lead(t1)-t1)

单线基 R 可以是

ave(df$t1, df$id, FUN = function(x) c(x[-1], NA) - x)
#[1] -1  1  0  1  3  1  2 NA  5  1 -2  2  1 -7 NA

选项data.table

library(data.table)
setDT(df)[, Diff = shift(t1, type = 'lead') - t1, id]