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」は開始状態を示します。

よろしくお願いします。

4

2 に答える 2

5

トランジションのデータ フレームを作成する方法は次のとおりです。

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
于 2013-01-10T08:17:58.787 に答える
3

のサンプルデータを使用するTraMineR::seqetm

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

あなたの例は、シーケンスを作成するためにprint.stslist使用する出力のようですseqconc

このシーケンスを手動で作成します

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
于 2013-01-09T23:42:02.327 に答える