假设我想估算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
我该如何实现?
答案 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
解决方案。首先使用b
组transmute
的出现的基本逻辑添加一列,并减去前一列。然后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