2014-01-16 161 views
0

我想計算狀態p(= previous)和n(= next)之間的平方非標準化(=頻率)轉換矩陣。我曾嘗試下面的腳本:計算平方轉換矩陣

p <- c("S1", "S1", "S2", "S3", "S4") 
n <- c("S2", "S2", "S3", "S4", "S5") 
d <- data.frame(fprev=p, fnext=n) 
counts <- table(as.data.frame(d)) 

計數是以下幾點:

 fnext 
fprev S2 S3 S4 S5 
    S1 2 0 0 0 
    S2 0 1 0 0 
    S3 0 0 1 0 
    S4 0 0 0 1 

這是非常接近我想要什麼,但我想獲得類似的結構,除了兩個fnext,重視並FPREV會S1 S2 S3 S4 S5 (我試過dnn參數表和deparse.level,但他們似乎沒有幫助)

所以預期的輸出應該有S1 S2 S3 S4 S5列和行方向(自然更多值爲0,例如th ERE是FPREV沒有S5狀態)

回答

3

爲了獲得表中的所有級別,你應該設置fprevfnext是與同級別的因素,像這樣現在

p <- c("S1", "S1", "S2", "S3", "S4") 
n <- c("S2", "S2", "S3", "S4", "S5") 

lvls <- sort(unique(c(p, n))) 

d <- data.frame(
    fprev = factor(p, levels=lvls), 
    fnext = factor(n, levels=lvls) 
) 

counts <- table(d) 

counts表應爲零成爲你想要的東西。

fprev S1 S2 S3 S4 S5 
    S1 0 2 0 0 0 
    S2 0 0 1 0 0 
    S3 0 0 0 1 0 
    S4 0 0 0 0 1 
    S5 0 0 0 0 0