r - 一致性矩阵
问题描述
假设我有一个包含任意数量的行和列的数据集,如下所示。
tmp <- tibble(id = 1:10,
v1 = c(0, 0, 0, 1, 1, 0, 0, 0, 0, 1),
v2 = c(0, 0, 0, 1, 0, 0, 0, 0, 0, 1),
v3 = c(0, 0, 0, 1, 0, 0, 0, 0, 1, 0),
v4 = c(0, 0, 0, 1, 1, 0, 0, 0, 1, 0))
每一行都是一个响应。受访者对特定问题表示是 (1) 或否 (0)。在这里,我们有 4 个问题。
将其转换为如下一致矩阵的最简单方法是什么:
v1 v2 v3 v4
v1 3 2 1 1
v2 2 2 1 1
v3 1 1 2 2
v4 1 1 2 3
每个单元格显示对行上的问题回答“是”的人,有多少人也对列上的问题回答“是”。
请注意,问题的数量可能大于 4,因此我不想在解决方案中硬编码变量名称。如果有帮助,我可以确保变量名称始终遵循特定格式。不关心变量名的解决方案是理想的(如果需要,我们可以删除 id 列)。
解决方案
最简单的方法是使用矩阵乘法...
mx <- as.matrix(tmp[,-1])
t(mx) %*% mx
v1 v2 v3 v4
v1 3 2 1 2
v2 2 2 1 1
v3 1 1 2 2
v4 2 1 2 3
crossprod(mx)
会做同样的事情。
推荐阅读
- angular - 想在 authguard 服务中调用服务方法
- xamarin.ios - 在win10上开发Xamarin不再需要Visual Studio 2019?
- php - laravel eloquent 如何获得区域的财务平衡
- kubernetes - 通过集群外的 pod IP 访问 pod 应用
- javascript - Microsoft.AspNetCore.Mvc.ViewFeatures.UnsupportedJavaScriptRuntime
- c# - Selenium - 等到元素存在、可见且可交互,即使在 C# 中的可滚动模式上也是如此
- android - Koin 在片段与其宿主活动之间的 SharedViewModel
- vue.js - BootstrapVue 组件未转换为 HTML
- mysql - Laravel 使用 where 和多个 whereHas
- get - 在 Raku 中使用 get/prompt gettig 后如何清除 stdin ($*IN) 上的 EOF?