让我们假设我想估计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
组减去a
组的time
观察。即2-1,7-6,10-8,13-11,19-18和25-20.
# Expected output
> out
[1] 1 1 2 2 1 5
我怎样才能做到这一点?
发布于 2019-04-13 08:25:24
我们可以找到b
的指数,并从它以前的索引中减去time
值。
inds <- which(df$group == "b")
df$time[inds] - df$time[inds - 1]
#[1] 1 1 2 2 1 5
发布于 2019-04-13 19:21:33
这里有一个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
https://stackoverflow.com/questions/55663432
复制相似问题