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]
我想计算 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]