首页 > 解决方案 > r 应用函数在矩阵中按行计算比例

问题描述

我正在使用 apply 函数来计算从时间 t1 的八个状态到时间 t2 的相同八个状态的迁移转换概率。我的数据以矩阵格式保存并命名为 tmp(如下)。时间 t1 的状态是我的行,时间 t2 的状态是我的列。例如,228 人在 t1 和 t2 之间停留在状态 1;3 人在 t1 和 t2 之间从状态 2 转移到状态 1。

> class(tmp)
"matrix"

> tmp

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]

[1,]  228    0    0    0    0    0    0    0

[2,]    3   92    0    0    0    0    0    0

[3,]    0    0   30    0    0    0    0    0

[4,]    0    0    0   20    0    0    0    0

[5,]    0    0    0    0   19    0    0    0

[6,]    0    0    0    0    0    0    0    0

[7,]    0    0    0    3    0    0    0    0

[8,]    0    0    0    0    0    0    0    3

我使用以下代码来计算移动到或停留在某个状态的概率。它是每行中单元格的比例。结果保存在 tmp1 中。

> tmp1=apply(tmp,1,function(X){if (sum(X)!=0) {X/sum(X)} else {numeric(length(X))}})

问题是:我预计 tmp1[4,7] 为 0(因为 tmp[4,7] 为 0),但代码返回我 1(粗体)。我的应用功能有问题吗?

> tmp1

[,1]       [,2] [,3] [,4] [,5] [,6] [,7] [,8]

[1,]    1 0.03157895    0    0    0    0    0    0

[2,]    0 0.96842105    0    0    0    0    0    0

[3,]    0 0.00000000    1    0    0    0    0    0

[4,]    0 0.00000000    0    1    0    0  **1**  0

[5,]    0 0.00000000    0    0    1    0    0    0

[6,]    0 0.00000000    0    0    0    0    0    0

[7,]    0 0.00000000    0    0    0    0    0    0

[8,]    0 0.00000000    0    0    0    0    0    1

标签: rmatrixrowapply

解决方案


推荐阅读