我想计算状态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参数添加到table和deparse.level但它们似乎没有帮助)
所以预期的输出应该在列方向和行方向都有S1 S2 S3 S4 S5(自然会有更多的值0,例如fprev中没有S5状态)
答案 0 :(得分:3)
为了获得表格中所有级别的零,您应该将fprev
和fnext
设置为具有相同级别的因子
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