查找data.frame中组之间的时滞

时间:2019-04-13 08:17:53

标签: r dataframe time grouping lag

假设我想估算data.frame中两组之间的时滞。

以下是我的数据示例:

df_1 = data.frame(time = c(1,3,5,6,8,11,15,16,18,20), group = 'a') # create group 'a' data
df_2 = data.frame(time = c(2,7,10,13,19,25), group = 'b') # create group 'b' data

df = rbind(df_1, df_2) # merge groups

df = df[with(df, order(time)), ] # order by time
rownames(df) = NULL #remove row names

> df
   time group
1     1     a
2     2     b
3     3     a
4     5     a
5     6     a
6     7     b
7     8     a
8    10     b
9    11     a
10   13     b
11   15     a
12   16     a
13   18     a
14   19     b
15   20     a
16   25     b

现在,我需要将time组的b观测值减去time组的a观测值。 即2-1、7-6、10-8、13-11、19-18和25-20。

# Expected output
> out
[1] 1 1 2 2 1 5

我该如何实现?

2 个答案:

答案 0 :(得分:1)

我们可以找到b的索引,并从先前的索引中减去time的值。

inds <- which(df$group == "b")
df$time[inds] - df$time[inds - 1]
#[1] 1 1 2 2 1 5

答案 1 :(得分:1)

这是一个tidyverse解决方案。首先使用btransmute的出现的基本逻辑添加一列,并减去前一列。然后filter只是结果,并用deframe

转换为向量
library(tidyverse)

df %>%
  transmute(result = if_else(group == "b", time - lag(time), 0)) %>% 
  filter(result != 0) %>%
  deframe()

结果:

[1] 1 1 2 2 1 5