[英]Quantitative Time-series data, duration of states
我有一個帶有時間變量和定性變量的縱向數據集。 我的主題可以處於以下三種狀態之一,有時狀態發生變化,有時保持不變。
我要生成的是一個新的數據框,該框為我提供了一個對象每次處於狀態時的時間,對象處於那個狀態的時間以及對象在該狀態保持多長時間。 我要這樣做是因為我的最終目標是查看狀態切換是否因不同的處理而更多/更少地發生,每個狀態的狀態長度不同,狀態的長度隨時間變化等。
示例數據:
set.seed(1)
Data=data.frame(time=1:100,State=sample(c('a','b','c'),100,replace=TRUE))
數據的前幾行如下所示
time State 1 1 a 2 2 b 3 3 b 4 4 c 5 5 a 6 6 c 7 7 c
我想產生這個:
StartTime State Duration 1 1 a 1 2 2 b 2 3 4 c 1 4 5 a 1 5 6 c 2
我可能可以使用while循環來實現這一點,但這似乎效率很低,特別是因為我的實際數據是每科70萬行。 有更好的方法嗎? 也許帶有diff函數和%in%。 我不知道。
set.seed(1)
Data=data.frame(time=1:100,State=sample(c('a','b','c'),100,replace=TRUE))
將data.table與該大小的數據一起使用:
library(data.table)
setDT(Data)
head(Data)
# time State
#1: 1 a
#2: 2 b
#3: 3 b
#4: 4 c
#5: 5 a
#6: 6 c
給每個狀態運行一個數字:
Data[, state_run := cumsum(c(TRUE, diff(as.integer(Data$State)) != 0L))]
#Note that this assumes that State is a factor variable
找到每個狀態運行的關注值:
Data2 <- Data[, list(StartTime = min(time),
State = State[1],
Duration = diff(range(time)) + 1), by = state_run]
head(Data2)
# state_run StartTime State Duration
#1: 1 1 a 1
#2: 2 2 b 2
#3: 3 4 c 1
#4: 4 5 a 1
#5: 5 6 c 2
#6: 6 8 b 2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.