R_中行之间的滞后差异是不同的

时间:2017-01-03 20:09:22

标签: r dplyr diff lag difference

我的问题类似于之前提出的一些问题,但我希望能够提出另外一个问题。

请参阅herehere。我将提取一些与这些问题相同的示例数据。对于我的问题的背景 - 我希望看到我观察到的捕获率(海洋生物)在同一区域采样的多天内如何变化。

我想计算给定地点的第一个样本日(下面的数据中的第一个字母)和随后的样本日(相同字母的下一行)之间的差异。

 #Example data   
 df <- data.frame(
 id = c("A", "A", "A", "A", "B", "B", "B"), 
 num = c(1, 8, 6, 3, 7, 7 , 9),
 What_I_Want = c(NA, 7, 5, 2, NA, 0, 2))

我找到的第一个解决方案计算每行之间的滞后差异。我也想要这个计算 - 所以找到它是有帮助的:

#Calculate lagged differences
df_new <- df %>% 
# group by condition
group_by(id) %>% 
# find difference
mutate(diff = num - lag(num))

这里的差异在A.1和A.2之间;那么A.2和A.3等......

我现在要做的是计算每组第一个值的差异。所以对于字母A,我想计算1 - 8,然后是1 - 6,最后是1 - 3.有任何建议吗?

一个笨重的解决方案(上面链接)是为每个距离滞后创建两个(或更多)列,以及如何合并我想要的结果

df_clunky = df %>%
group_by(id) %>%
mutate(
deltaLag1 = num - lag(num, 1),
deltaLag2 = num - lag(num, 2))

1 个答案:

答案 0 :(得分:1)

以下是包含replaceave

的基本R方法
ave(df$num , df$id, FUN=function(x) replace(x - x[1], 1, NA))
[1] NA  7  5  2 NA  0  2

avereplace函数应用于每个ID。 replace将向量和向量中的第一个元素的差异作为其输入,并将NA替换为第一个元素。