我正在尝试编写函数或使用cut
在某些日期数据关闭时将分组变量分配给某些日期数据(用户定义为close)。例如,我想为连续日期收集的一些样本创建一个公共分组变量。我在想cut
可以在这里工作,但后来我意识到cut
在它们接近时不会对变量进行分组,而是根据序列创建一系列组。
所以请以此数据框为例:
df <- structure(list(Num = c(0.888401849195361, 0.185766335576773,
0.493163562379777, 0.13070688676089, 0.484760325402021, 0.603240836178884,
0.893201333936304, 0.641203448642045, 0.16957180458121, 0.0101411847863346
), Date = structure(c(10592, 10597, 10598, 10605, 10606, 10608,
10609, 10616, 10617, 10618), class = "Date"), day = c(1L, 6L,
7L, 14L, 15L, 17L, 18L, 25L, 26L, 27L)), .Names = c("Num", "Date",
"day"), row.names = c(NA, -10L), class = "data.frame")
如果要应用剪切功能,因为我理解它的用法如下:
df$cutVar <- cut(df$day, breaks= seq(0, 31, by = 1), right=TRUE)
我会留下一个范围,通过我希望组合在一起的值。例如,第6和第7应基于它们彼此的接近度而组合在一起。类似于第14和第15等等。
> df
Num Date day cutVar
1 0.88840185 1999-01-01 1 (0,1]
2 0.18576634 1999-01-06 6 (5,6]
3 0.49316356 1999-01-07 7 (6,7]
4 0.13070689 1999-01-14 14 (13,14]
5 0.48476033 1999-01-15 15 (14,15]
6 0.60324084 1999-01-17 17 (16,17]
7 0.89320133 1999-01-18 18 (17,18]
8 0.64120345 1999-01-25 25 (24,25]
9 0.16957180 1999-01-26 26 (25,26]
10 0.01014118 1999-01-27 27 (26,27]
所以这里的基本问题是如何对连续变量(在这个例子中为日期)进行分组,使得close(由用户定义)数字在一个因子范围内组合在一起?
答案 0 :(得分:1)
这是你想要的吗?其中3
是我为方便起见而选择的门槛。它可以是您喜欢的任何数字:
df$group <- cumsum(c(1, diff.Date(df$Date)) >= 3)
df
Num Date day group
1 0.88840185 1999-01-01 1 0
2 0.18576634 1999-01-06 6 1
3 0.49316356 1999-01-07 7 1
4 0.13070689 1999-01-14 14 2
5 0.48476033 1999-01-15 15 2
6 0.60324084 1999-01-17 17 2
7 0.89320133 1999-01-18 18 2
8 0.64120345 1999-01-25 25 3
9 0.16957180 1999-01-26 26 3
10 0.01014118 1999-01-27 27 3