我有一个带有少量事件指标的xts对象.我需要通过某些事件将其拆分,以便从给定事件到下一个事件的所有条目都将保存在同一个事件中xts,最终创建一个xts对象列表,每个对象都包含事件作为最后一个条目而没有其他事件相同的类型.
一个例子:
ts = as.Date(Sys.Date()-99:0)
e1 = numeric(100);e1[10*1:10]=1
e2 = numeric(100);e2[15*1:6]=1
y = 1:100 # just a sample content
xs = as.xts(cbind(e1,e2,y),order.by=ts)
ee = e1*e2==1 # the event in which both e1 and e2 are 1, should happen at 30,60,90
# here should be splitting function that gets xs and ee as parameters
# and should return a list of 4 xts: the first with the entries 1 through 30,
# the second with entries 31 to 60, the third with entries 61 to 90, and the last
# with entries 91 to 100
Run Code Online (Sandbox Code Playgroud)
非常感谢您的建议.
使用cumsum(ee)以创建分组变量,然后只需要调用split.您必须对输出进行小的更改cumsum,因为您希望TRUE值是组中的最后一个观察值(而不是第一个).
split(xs, c(0,head(cumsum(ee),-1)))
split(xs,rev(cumsum(rev(ee)))) # grouping factors reversed
Run Code Online (Sandbox Code Playgroud)