我想根据另一列的值将时间序列数据分为不同的段(每个段都是不同的数据框)。例如:
#Generate a data frame of hourly precipitation and water level.
install.packages("lubridate")
library(lubridate)
df<-data.frame(date_time=ymd_hms(seq(c(ISOdate(2000,3,20)), by = "hour", length.out = 365)), precip= sample(0:10,365,replace=T), water_level=sample(-50:50,365,replace=T)))
我想对水位为负值时的时间序列数据进行子集处理,并保持日期时间值不变(使用lubridate分析),以及该连续时间范围内的水位和降水量变量。 / p>
答案 0 :(得分:1)
我们可以创建一个变量以在正值和负值之间进行分组并进行拆分。在您的情况下,我们创建一个逻辑向量df$water_level >= 0
,其值大于或小于0。在它们之间创建顺序组的方法是,当差异不为0时,取该差异的累加总和,这意味着下一个值为FALSE(或TRUE)。
split(df, cumsum(c(TRUE, diff(df$water_level >= 0) != 0)))
给出,
$`1` date_time precip water_level 1 2000-03-20 12:00:00 8 45 $`2` date_time precip water_level 2 2000-03-20 13:00:00 9 -12 $`3` date_time precip water_level 3 2000-03-20 14:00:00 4 9 4 2000-03-20 15:00:00 0 13 5 2000-03-20 16:00:00 8 34 $`4` date_time precip water_level 6 2000-03-20 17:00:00 1 -20 ... ...