r - 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
解决方案
推荐阅读
- stata - 有没有办法将个人 ado 目录的路径存储在宏中?
- asp.net - 创建 Graph Webhook 订阅,为什么我会收到此消息?“响应必须与validationToken 查询参数完全匹配”
- php - 在 laravel elequent 中使用 tow
- python - 在多个轴上按索引切片 numpy
- deno - Deno 允许所有权限
- elasticsearch - 我是 ES 新手,在 ES 中有一个多重匹配查询,并希望根据其可用性考虑字段
- windows - 带有 LOCALE_SABBREVLANGNAME 的 GetLocaleInfo 是否已弃用?
- python - 用于 ?在正则表达式中的命名组中
- javascript - 如何将项目拖放到 react-dnd 中的空白部分?
- python - 数据帧长度 PySpark