【发布时间】:2016-11-14 18:30:52
【问题描述】:
我有一个正在 R 中处理的数据集。我想将某个类别的出现时间分组,指示每个组出现的顺序。
数据按“id”分组,按“时间”采样,并具有“类别”标签(低、高)。
#make example data
id <- c("a", "a", "a", "a", "a", "b", "b", "b", "b", "b")
time <- seq.POSIXt(as.POSIXct("10/24/16 21:05", format="%m/%d/%y %H:%M", tz="America/Chicago"), by="5 min", length.out=10)
category <- c("low", "high", "high", "low", "low", "low", "high", "high", "low", "low")
dat<-data.frame(id, time, category)
> dat
id time category
1 a 2016-10-24 21:05:00 low
2 a 2016-10-24 21:10:00 high
3 a 2016-10-24 21:15:00 high
4 a 2016-10-24 21:20:00 low
5 a 2016-10-24 21:25:00 low
6 b 2016-10-24 21:30:00 low
7 b 2016-10-24 21:35:00 high
8 b 2016-10-24 21:40:00 high
9 b 2016-10-24 21:45:00 low
10 b 2016-10-24 21:50:00 low
我想创建一个变量“组”来标记每个类别所属的时间组,例如: 如果类别 == 在时间 X 和时间 X+1 的类别,则它们在同一组中 如果 category != category 在时间 X 和时间 X+1,则组结束
组按时间排序,因此给定“类别”组的第一次出现是 1,接下来是 2。
这与计算每个类别标签随时间出现的次数的序列不同。虽然我需要对“组”值进行排序,但我需要在顺序“类别”的每个“组”中重复该值。
#example data of what I want
dat$group <- c(1, 1, 1, 2, 2, 1, 1, 1, 2, 2) #this is the variable I want
dat$seq <- with(dat, ave(as.character(category), category, FUN = seq_along)) #count sequence variable, which is different than what I'm after because it does not repeat within sequential categories
> dat
id time category group seq
1 a 2016-10-24 21:05:00 low 1 1
2 a 2016-10-24 21:10:00 high 1 1
3 a 2016-10-24 21:15:00 high 1 2
4 a 2016-10-24 21:20:00 low 2 2
5 a 2016-10-24 21:25:00 low 2 3
6 b 2016-10-24 21:30:00 low 1 4
7 b 2016-10-24 21:35:00 high 1 3
8 b 2016-10-24 21:40:00 high 1 4
9 b 2016-10-24 21:45:00 low 2 5
10 b 2016-10-24 21:50:00 low 2 6
基本上,这个想法是“组”是一个事件,它可以在不同的时间长度内发生。但即使它的长度不同,它仍然是同一个事件。所以你有第一个事件,第二个事件等等。
我在网上搜索过,但没有看到与问题匹配的帖子。如果我忽略了之前的帖子,欢迎提供相关帖子的链接。
提前感谢您的帮助!
已编辑,2016 年 12 月 14 日为清晰起见并试图引起人们的兴趣。
【问题讨论】: