我有一个向量,它有一个独特的事件的开始和结束标志,在一个因子中编码为" start“和" end”。包括“开始”和“结束”之间的索引被计入事件的一部分。因此,我想使用eventFlag和eventIndex,前者是一个逻辑上指示事件是否正在发生的变量,后者为每个事件提供一个递增的数字。
# what I have
eventPoints <- factor(c(NA,NA,NA,NA,"start",NA,NA,NA,NA,
"end",NA,NA,"start",NA,"end",NA,NA,"start","end",NA))
# what I want
eventFlag <-c(FALSE,FALSE,FALSE,FALSE,TRUE,TRUE,TRUE,TRUE,
TRUE,TRUE,FALSE,FALSE,TRUE,TRUE,TRUE,FALSE,FALSE,TRUE,
TRUE,FALSE)
eventIndex <-c(0,0,0,0,1,1,1,1,1,1,0,0,2,2,2,0,0,3,3,0)
data.frame(eventPoints,eventFlag,eventIndex)事件是严格递增的,如果这有助于或简化事情的话。
发布于 2018-07-24 04:16:20
我们基于'eventPoints‘中'start','end’的对应出现创建一个序列索引
s1 <- with(df1, unlist(Map(seq, which(eventPoints == "start"),
which(eventPoints == "end"))))
df1$eventFlag <- FALSE
df1$eventFlag[s1] <- TRUE并且可以使用游程长度编码(rle)创建“eventIndex”。
df1$eventIndex <- inverse.rle(within.list(rle(df1$eventFlag),
values[values] <- seq_along(values[values])))
df1
# eventPoints eventFlag eventIndex
#1 <NA> FALSE 0
#2 <NA> FALSE 0
#3 <NA> FALSE 0
#4 <NA> FALSE 0
#5 start TRUE 1
#6 <NA> TRUE 1
#7 <NA> TRUE 1
#8 <NA> TRUE 1
#9 <NA> TRUE 1
#10 end TRUE 1
#11 <NA> FALSE 0
#12 <NA> FALSE 0
#13 start TRUE 2
#14 <NA> TRUE 2
#15 end TRUE 2
#16 <NA> FALSE 0
#17 <NA> FALSE 0
#18 start TRUE 3
#19 end TRUE 3
#20 <NA> FALSE 0数据
df1 <- data.frame(eventPoints)https://stackoverflow.com/questions/51486436
复制相似问题