【发布时间】:2018-12-06 18:01:42
【问题描述】:
我的虚拟数据如下所示
df = data.frame(name = c(rep("Anna",8),rep("Jenny",7)),
id = c(100,100,100,100,100,100,100,100,250,250,250,250,250,250,250),
time = c("t2","t3","t5","t1","t7","t2","t1","t5","t1","t2","t6","t2","t8","t6","t5"), stringsAsFactors = F)
> df
name id time
1 Anna 100 t2
2 Anna 100 t3
3 Anna 100 t5
4 Anna 100 t1
5 Anna 100 t7
6 Anna 100 t2
7 Anna 100 t1
8 Anna 100 t5
9 Jenny 250 t1
10 Jenny 250 t2
11 Jenny 250 t6
12 Jenny 250 t2
13 Jenny 250 t8
14 Jenny 250 t6
15 Jenny 250 t5
我的预期输出是,对于每个 id 组,我想使用time 变量在 t2 和 t5 之间的 flag 值 - 会有在每组中有多个这种情况,并且代码应该能够排除一些损坏的情况,如下例所示
> df
name id time Flag
1 Anna 100 t2 1
2 Anna 100 t3 1
3 Anna 100 t5 1
4 Anna 100 t1 0
5 Anna 100 t7 0
6 Anna 100 t2 1
7 Anna 100 t1 1
8 Anna 100 t5 1
9 Jenny 250 t1 0
10 Jenny 250 t2 0
11 Jenny 250 t6 0
12 Jenny 250 t2 1
13 Jenny 250 t8 1
14 Jenny 250 t6 1
15 Jenny 250 t5 1
我使用dplyr()mode 提出这个问题,因为我将来可以添加更多分组变量以实现可扩展性。我搜索了如何在 dplyr 函数中使用which(),结果并不多,我在这里找到了一个等效的python Get rows between two values of a column using Python
Edit1:我在每个组中有多个 t2-t5 部分需要标记。感谢@ronak 提出来
提前致谢
【问题讨论】: