r应用函数来计算矩阵中的行比例

时间:2018-05-18 13:09:36

标签: r matrix row apply

我正在使用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

0 个答案:

没有答案