r - 使用“table”函数在 R 中创建转换矩阵
问题描述
我有一个包含 4 列的数据框:期间、ID、当前期间的类别、下一期间的类别。
period <- c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2)
ID <- c('a12', 'a123', 'a1234', 'a12345', 'b12', 'b123', 'b1234', 'b12345', 'c12', 'c123')
category_t0 <- c(1, 2, 3, 4, 1, 1, 1, 2, 3, 5, 1, 3, 2, 5, 1, 1, 2, 3, 4, 1)
category_t1 <- c(1, 3, 2, 5, 1, 1, 2, 3, 4, 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA', 'NA')
df <- data.frame(period, ID, category_t0, category_t1)
我需要为每个时期创建单独的转换矩阵。我试图使用“表格”功能,但无法弄清楚如何在某个条件下写入以使用某个时间段。以下代码考虑了数据框中的所有观察结果,而我只需要采用“周期 == 1”的值。
trans_1to2 = table(df$category_t0, df$category_t1, useNA = c("ifany"))
matrix_1to2 = trans_1to2 / rowSums(trans_1to2)
print(matrix_1to2)
有人可以分享这方面的想法吗?此外,真实数据有 50 个周期,所以我需要创建 50 个不同的转换矩阵。最好的方法是什么(例如使用循环)?
谢谢!
解决方案
您可以使用 in 进行子集df
化df$period==1
以[
获取第 1 期的表格。
trans_1to2 = table(df[df$period==1, 3:4])
trans_1to2 / rowSums(trans_1to2)
# category_t1
#category_t0 1 2 3 4 5 NA
# 1 0.75 0.25 0.00 0.00 0.00 0.00
# 2 0.00 0.00 1.00 0.00 0.00 0.00
# 3 0.00 0.50 0.00 0.50 0.00 0.00
# 4 0.00 0.00 0.00 0.00 1.00 0.00
# 5 0.00 0.00 0.00 0.00 0.00 1.00
要使其适用于多个时期,只需将时期也添加到table
:
trans_1to2 <- table(df[c(3,4,1)])
matrix_1to2 <- proportions(trans_1to2, c(1,3))
matrix_1to2[,,1] #Get first period
# category_t1
#category_t0 1 2 3 4 5 NA
# 1 0.75 0.25 0.00 0.00 0.00 0.00
# 2 0.00 0.00 1.00 0.00 0.00 0.00
# 3 0.00 0.50 0.00 0.50 0.00 0.00
# 4 0.00 0.00 0.00 0.00 1.00 0.00
# 5 0.00 0.00 0.00 0.00 0.00 1.00
matrix_1to2[,,2] #Get second period
# category_t1
#category_t0 1 2 3 4 5 NA
# 1 0 0 0 0 0 1
# 2 0 0 0 0 0 1
# 3 0 0 0 0 0 1
# 4 0 0 0 0 0 1
# 5 0 0 0 0 0 1
推荐阅读
- react-native - 如何使用异步存储 Axios
- python - Packages shipment (packages consolidation) with OR-Tools CP Solver in Python (multi-knapsack)
- java - 有什么方法可以像在airdroid应用程序中一样在android studio中使用远程IP地址(不在本地网络上)访问directroy?
- php - 按关联值合并多维数组
- validation - 如何在 Laravel 验证中返回经过验证的 ID 值
- javascript - 我如何从分页表中访问所有表
- sql - 如何在 PL/SQL 中连接两个表而不创建新表
- java - UnsatisfiedDependencyException:创建名称为“trackiHuntServiceImpl”的 bean 时出错:通过字段“deviceService”表示不满足的依赖关系
- powershell - System Center Service Management Automation (SMA) PowerShell Runbook Invoke-NcSsh:系统找不到指定的文件
- python - 在 Python 中读取带有重音符号和特殊字符的 YAML 文件