繁体   English   中英

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

[英]Lagged difference between rows in R_ a different take

我的问题与之前提出的几个问题类似,但我希望与众不同,以保证提出一个单独的问题。

看到这里这里 我将抽取一些与这些问题相同的示例数据。 就我的问题而言,我想看看在对同一区域进行采样的多天内观察到的捕获率(海洋生物)如何变化。

我想计算给定站点的第一个采样日(以下数据中的第一个字母)与随后的采样日(同一字母的下一行)之间的差。

 #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))

这是带有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替换为第一个元素。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM