Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何根据另一列中的值范围将时间序列数据分割为连续数据段_R_Datetime_Subset_Segment - Fatal编程技术网

R 如何根据另一列中的值范围将时间序列数据分割为连续数据段

R 如何根据另一列中的值范围将时间序列数据分割为连续数据段,r,datetime,subset,segment,R,Datetime,Subset,Segment,我想根据另一列的值将时间序列数据分成不同的段(每个段都是不同的数据帧)。例如: #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))

我想根据另一列的值将时间序列数据分成不同的段(每个段都是不同的数据帧)。例如:

#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”)
图书馆(lubridate)

df我们可以创建一个变量,在正值和负值之间分组,并进行分割。在您的例子中,我们创建一个逻辑向量
df$water_level>=0
,其值大于或小于0。在它们之间创建顺序组的方法是,当差值不是0时,取差值的累积和,这意味着下一个值为FALSE(或TRUE)

这就给了,


所以简单地
split(df,df$water_level>=0)
?@Sotos谢谢你的回答。实际上,我要求每个子集都有一个连续的时间序列,所以当水位为正时,数据集需要拆分到该点,然后再次开始检查水位是否为负,再次包含水位的所有连续负值,并在水位为正时再次拆分。在这种情况下,“拆分”数据并不能实现这一点,因为存在时间间隔。这很好。它起作用了。非常感谢你。但你认为你能解释“cumsum(c(真,差(df$water_level>=0)!=0)”是如何产生分组因子的吗?我不太确定这是如何工作的。是的,让我补充一些解释,所以试着把它分解并一点一点地运行。这将揭示它的工作方式精辟的解释!非常感谢你。是的,的确如此
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
...
...