2017-01-20 9 views
3

私のデータは次のようになります。遷移状態図Rは

enter image description here

dput(sequence_data)の出力。

structure(list(Obs = 1:13, Seq.1 = structure(c(1L, 1L, 1L, 1L, 
2L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L), .Label = c("a", "b", "c" 
), class = "factor"), Seq.2 = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("c", "d"), class = "factor"), 
    Seq.3 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 3L, 3L, 3L, 3L, 
    3L, 3L, 3L), .Label = c("", "d", "e"), class = "factor"), 
    Seq.4 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 
    1L, 1L, 2L), .Label = c("", "f"), class = "factor")), .Names = c("Obs", 
"Seq.1", "Seq.2", "Seq.3", "Seq.4"), class = "data.frame", row.names = c(NA, 
-13L)) 

私は遷移状態図を取得しようとしています。ここでは、コードは次のようになります。

transitions <- table(sequence_data$Seq.1,sequence_data$Seq.2) %>% 
getRefClass("Transition")$new(label=c("1st Iteration", "2nd Iteration")) 
transitions$box_width = 0.25; 
transitions$box_label_cex = 0.7; 
transitions$arrow_type = "simple"; 
transitions$arrow_rez = 300; 
table(sequence_data$Seq.2,sequence_data$Seq.3) %>% transitions$addTransitions(label = '3rd Iteration') 
transitions$render() 

、ここでは、出力は次のようになります。それは、よりクリーンに見えるように enter image description here

空の値をTEダイアグラムから削除することはできますか?私は削除しようとしましたが、テーブルステートメントは値が同じ長さである必要があります。

GMISCパッケージ(library(Gmisc))を使用しています。

おかげ

+0

あなたはすべてを持っていない支援しようと、人々はそれを追加するように、あなたのコード内のライブラリ(Gmisc) ''への呼び出しを含めてくださいパッケージ名の正しいスペルがないか検索してください。また、 'dput(sequence_data)'の出力をあなたの質問に貼り付けることで、データサンプルを追加してください。 – eipi10

+0

ありがとうございます。変更を加えました – user3252148

答えて

3

これは少しハックかもしれないが、そこにあなたを取得します。基本的には、手動でトランジション(transitions$transitions)を0に設定します。

transitions$transitions[[2]][1,1] = 0 
transitions$transitions[[2]][2,1] = 0 
transitions$render() 

(私はまだ大規模なデータのためにチェックしていませんが)たぶん、このループは自動的に0にすべての値を変更することができます

for (level_n in 1:length(transitions$transitions)){ 
    x = transitions$transitions[[level_n]] 
    for (cols in 1:ncol(transitions$transitions[[level_n]])){    
     if (dimnames(x)[[2]][cols] == ""){ 
      transitions$transitions[[level_n]][,cols] = 0 
     } 
    } 
} 

enter image description here

+1

私の元のデータには、マップする必要がある1000のシーケンスがあります。上記のデータはレイアウトを表示するためだけに作成したものでした。ですから、データが欠落している遷移マトリックスの値を0に設定することをお勧めしますか? – user3252148

+0

ありがとうございます! – user3252148

3

あなたはに値を設定するためにlapplyを使用することができます列名が空の文字列のすべての列に対してゼロ。その後、transition$render()を実行すると、空の遷移はなくなります。

# Set transitions table columns with a blank name to zeros 
transitions$transitions = lapply(transitions$transitions, function(tab) { 
    tab[ , which(colnames(tab)=="")] = 0 
    tab 
}) 

はしかし、lapplyは、エラーの原因となって、出力リストから「トランジション」属性を取り除き(誰もがこれを回避する方法を知っていれば、私に知らせてください。私は次のように、これは単純に行うことができる、最初に考えました)。私はこの上で働いていたとして、私は思っていた

# Set transitions table columns with a blank name to zeros 
tmp = lapply(transitions$transitions, function(tab) { 
    tab[ , which(colnames(tab)=="")] = 0 
    tab 
}) 

# Restore "transition" attribute 
attributes(tmp)$transitions = TRUE 

# Set transitions to the new values we just created 
transitions$transitions = tmp 

enter image description here

:だからではなく、私はtransitions$transitionsの値をリセットし、「トランジション」属性を復元し、tmpと呼ばれる一時的なオブジェクトで更新リストを保存します空白の推移値に何が起こったのだろうか。上記のグラフは、第2反復のcの値がすべてdになり、第2回の反復のdの値がすべてeになったことを示すように見えるため、誤解を招く可能性があります。しかし、実際には、13個の値のうちの5個が""(空の文字列)になりました。彼らはただ消えましたか?もしそうなら、第3反復バーの全高さが第1反復バーと第2反復バーの高さの7/13になるべきではありませんか?それとも、単に値のいくつかは忘却の彼方に移行することを示すために、このような何かを試してみてください。

transitions$fill_clr[[3]] = c("white", transitions$fill_clr[[3]][-1]) 
transitions$render() 
また

enter image description here

、ブランクが実際に第三遷移に2日から同じまま値を表す行います?そうであれば、ブランク値を前回の遷移からのそれぞれの値で埋める方がよいかもしれません。次のようにこのような状況のため、グラフが見えます:

library(zoo) 

# Convert empty values to NA 
sequence_data[sequence_data==""] = NA 

# Fill NA values with last value carried forward 
sequence_data=as.data.frame(t(apply(sequence_data, 1, na.locf))) 

transitions <- table(sequence_data$Seq.1, sequence_data$Seq.2) %>% 
getRefClass("Transition")$new(label=c("1st Iteration", "2nd Iteration")) 
transitions$box_width = 0.25; 
transitions$box_label_cex = 1; 
transitions$box_cex = 2; 
transitions$arrow_type = "simple"; 
transitions$arrow_rez = 300; 
table(sequence_data$Seq.2,sequence_data$Seq.3) %>% transitions$addTransitions(label = '3rd Iteration') 
transitions$render() 

enter image description here

関連する問題