2013-01-09 63 views
4

我有連續數據的數據幀基於過渡的序列:
df <- data.frame(
t1=c("e","e","e"),t2=c("e","e","u"),t3=c("e","e","u"),t4=c("e","u","e"),t5=c("e","u","e"))
創建從基於狀態的序列

它看起來像

> df 
    t1 t2 t3 t4 t5 
1 e e e e e 
2 e e e u u 
3 e u u e e 

我想變換與狀態序列該數據幀轉換爲具有如下轉換序列的數據幀:

> dfNew 
    t1 t2 t3 t4 t5 
1 se ee ee ee ee 
2 se ee ee eu uu 
3 se eu uu ue ee 

其中「s」表示起始狀態。

我將不勝感激您的幫助。

回答

5

下面是創建transistions的數據幀的方式:

setNames(as.data.frame(t(apply(df, 1, 
           function(x) 
           paste(c("s", head(x, -1)), x, sep = "")))), 
                     names(df)) 

    t1 t2 t3 t4 t5 
1 se ee ee ee ee 
2 se ee ee eu uu 
3 se eu uu ue ee 
+0

似乎'paste(c(「s」,head(x,-1)),x,sep =「」)'更適合我的問題。非常感謝你!!! – POTENZA

+0

@POTENZA對不起,我修好了。 –

3

TraMineR::seqetm

data(actcal) 
actcal.seq <- seqdef(actcal,13:24, 
     labels=c("FullTime", "PartTime", "LowPartTime", "NoWork")) 

你的示例使用示例數據似乎是print.stslist輸出它使用seqconc創建序列

所以我將創建該序列manaully

actcal.seqconc <- seqconc(actcal.seq) 

這是一個矩陣。所以我們可以應用這個函數來分割-,然後根據需要重新組合轉換狀態。要做到這一點的函數是如下:

transitions <- function(x, start = 'S') { 

x <- unlist(strsplit(x, '-') 
paste0(c(start, head(x, -1)), x, collapse = '-') 
} 

actcal.tseq <- as.matrix(apply(actcal.seqconc, 1, transitions)) 

如果你想轉換率之間的狀態使用seqtrate

seqtrate(actcal.seq) 
[>] computing transition rates for states A/B/C/D ... 
      [-> A]  [-> B]  [-> C]  [-> D] 
[A ->] 0.986991870 0.005203252 0.001084011 0.006720867 
[B ->] 0.009700665 0.970343681 0.007760532 0.012195122 
[C ->] 0.005555556 0.014814815 0.934259259 0.045370370 
[D ->] 0.008705580 0.006279435 0.014985015 0.970029970 
+0

謝謝你需要你的幫助,但是你的功能並沒有給我我想要的正確的「過渡型」序列。例如,您的功能創建了一個新的序列,例如SB-SB-SB-SB-SB等。你有什麼建議嗎? – POTENZA

+0

@POTENZA,我明白你的意思了。看我的編輯。 – mnel

+0

我很難理解你的代碼,特別是關於lapply和apply。我再次編輯我的問題。如果可能的話,你能否根據我的例子製作一個代碼?非常感謝你提前。 – POTENZA