R_中行之间的滞后差异
Lagged difference between rows in R_ a different take
我的问题与之前提出的一些问题类似,但我希望不同之处足以保证单独提出一个问题。
参见 here, and 。我将提取一些与这些问题相同的示例数据。关于我的问题的背景——我想看看我观察到的捕获率(海洋生物)在同一区域采样的多天里是如何变化的。
我想计算给定站点的第一个样本日(下面数据中的第一个字母)与随后的样本日(同一字母的下一行)之间的差异。
#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))
这是一个基本的 R 方法 replace
和 ave
ave(df$num , df$id, FUN=function(x) replace(x - x[1], 1, NA))
[1] NA 7 5 2 NA 0 2
ave
对每个 id 应用 replace
函数。 replace
将向量与向量中第一个元素的差值作为输入,将NA替换为第一个元素。
我的问题与之前提出的一些问题类似,但我希望不同之处足以保证单独提出一个问题。
参见 here, and
我想计算给定站点的第一个样本日(下面数据中的第一个字母)与随后的样本日(同一字母的下一行)之间的差异。
#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))
这是一个基本的 R 方法 replace
和 ave
ave(df$num , df$id, FUN=function(x) replace(x - x[1], 1, NA))
[1] NA 7 5 2 NA 0 2
ave
对每个 id 应用 replace
函数。 replace
将向量与向量中第一个元素的差值作为输入,将NA替换为第一个元素。