从 data.frame 或 data.table 构建方形邻接矩阵

2023-11-25

我正在尝试建立一个方形邻接matrix from a data.table。 这是我已经拥有的可重现的示例:

require(data.table)
require(plyr)
require(reshape2)
# Build a mock data.table
dt <- data.table(Source=as.character(rep(letters[1:3],2)),Target=as.character(rep(letters[4:2],2)))
dt
#   Source Target
#1:      a      d
#2:      b      c
#3:      c      b
#4:      a      d
#5:      b      c
#6:      c      b
sry <- ddply(dt, .(Source,Target), summarize, Frequency=length(Source))
sry
#  Source Target Frequency
#1      a      d         2
#2      b      c         2
#3      c      b         2
mtx <- as.matrix(dcast(sry, Source ~ Target, value.var="Frequency", fill=0))
rownames(mtx) <- mtx[,1]
mtx <- mtx[,2:ncol(mtx)]
mtx
#  b   c   d
#a "0" "0" "2"
#b "0" "2" "0"
#c "2" "0" "0"

现在,这非常接近我想要得到的,除了我希望所有节点都以两个维度表示,例如:

  a b c d
a 0 0 0 2
b 0 0 2 0
c 0 2 0 0
d 0 0 0 0

请注意,我正在处理相当大的数据,所以我想为此找到一个有效的解决方案。

感谢您的帮助。


解决方案(编辑) :

考虑到所提供解决方案的质量和数据集的大小,我对所有解决方案进行了基准测试。

#The bench was made with a 1-million-row sample from my original dataset
library(data.table)
aa <- fread("small2.csv",sep="^")
dt <- aa[,c(8,9),with=F]
colnames(dt) <- c("Source","Target")
dim(dt)
#[1] 1000001       2
levs <- unique(unlist(dt, use.names=F))
length(levs)
#[1] 2222

给定此数据,所需的输出是一个 2222*2222 矩阵(2222*2223 解决方案,其中第一列包含行names显然也是可以接受的)。

# Ananda Mahto's first solution
am1 <- function() {
    table(dt[, lapply(.SD, factor, levs)])
}
dim(am1())
#[1] 2222 2222

# Ananda Mahto's second solution
am2 <- function() {
    as.matrix(dcast(dt[, lapply(.SD, factor, levs)], Source~Target, drop=F, value.var="Target", fun.aggregate=length))
}
dim(am2())
#[1] 2222 2223

library(dplyr)
library(tidyr)
# Akrun's solution
akr <- function() {
    dt %>%
       mutate_each(funs(factor(., levs))) %>%
       group_by(Source, Target) %>%
       tally() %>%
       spread(Target, n, drop=FALSE, fill=0)
}
dim(akr())
#[1] 2222 2223

library(igraph)
# Carlos Cinelli's solution
cc <- function() {
    g <- graph_from_data_frame(dt)
    as_adjacency_matrix(g)
}
dim(cc())
#[1] 2222 2222

基准测试的结果是……

library(rbenchmark)
benchmark(am1(), am2(), akr(), cc(), replications=75)
#    test replications elapsed relative user.self sys.self user.child sys.child
# 1 am1()           75  15.939    1.000    15.636    0.280          0         0
# 2 am2()           75 111.558    6.999   109.345    1.616          0         0
# 3 akr()           75  43.786    2.747    42.463    1.134          0         0
# 4  cc()           75  46.193    2.898    45.532    0.563          0         0

听起来你只是在寻找table,但您应该确保两列具有相同的因子水平:

levs <- unique(unlist(dt, use.names = FALSE))
table(lapply(dt, factor, levs))
#       Target
# Source a b c d
#      a 0 0 0 2
#      b 0 0 2 0
#      c 0 2 0 0
#      d 0 0 0 0

我不知道它是否会提供任何速度改进,但您也可以使用dcast来自“数据.表”:

dcast(lapply(dt, factor, levs), Source ~ Target, drop = FALSE,
      value.var = "Target", fun.aggregate = length)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 data.frame 或 data.table 构建方形邻接矩阵 的相关文章

  • 正则表达式字符串中第一个和最后一个非点的位置

    我希望找到字符串的第一个和最后一个非点元素的位置 理想情况下我想这样做regex在基地R 我已经写过R解决问题的代码 不过 我对一个感兴趣regex解决方案 感谢您的任何建议 这是一个示例数据集和R代码以获得所需的结果 此代码拆分字符串并使
  • 多功能测试仪替代 system.time

    我已经看到 我认为是这样 使用了类似于 system time 的函数 它可以同时评估多个函数的时间并输出一个输出 我不记得它是什么 并且用我正在使用的术语进行互联网搜索并没有得到我想要的响应 有人知道我正在谈论的功能的名称 位置吗 你想要
  • 如何使用 R 计算成为列表中中位数的概率?

    假设我有以下数据集 其中显示了假设实验的每个状态的三个观察结果的列表 state lt c Iowa Minnesota Illinois outcome lt list c 5 11 11 c 3 12 8 c 9 14 2 dat lt
  • 如何使用 usmap 标记数字而不是名称?

    我知道 usmap 有一个选项label in plot usmap 我想标记一些数字 而不是状态名称 我想 usmap 中应该有与州质心坐标相关的数据 但我不知道如何找到它 如果我能得到 坐标然后我可以用它来标记数字geom text 这
  • kernlab 中 SVM 训练之外的核矩阵计算

    我正在开发一种新算法 该算法可以生成修改后的核矩阵以用于 SVM 训练 但遇到了一个奇怪的问题 出于测试目的 我比较了使用 kernelMatrix 接口和普通内核接口学习的 SVM 模型 例如 Model with kernelMatri
  • 删除特定数据表上的所有边框

    我需要使用 PrimeFaces 隐藏一个数据表的所有边框 而不是全部 我尝试了很多事情 但没有人奏效 有谁知道该怎么做 我已将以下样式 单独 应用于ui datatable class border hidden important bo
  • 在 R 中绘制 Likert 变量的堆积条形图

    假设我有一个如下所示的数据框 P Q1 Q2 1 1 4 1 2 2 3 4 3 1 1 4 其中的列告诉我哪个人相应地回答了问题 q1 q2 中的哪一个 这些问题需要按照 4 分李克特量表进行回答 例如 批准 表示 1 稍微批准 表示 2
  • 从命令行运行 R 代码 (Windows)

    我在名为 analysis r 的文件中有一些 R 代码 我希望能够从命令行 CMD 运行该文件中的代码 而无需通过 R 终端 并且我还希望能够传递参数并在我的代码中使用这些参数 例如就像下面的伪代码 C gt execute r scri
  • R独特的列或行与NA无可比拟

    有谁知道如果incomparables的论证unique or duplicated 曾经被实施过incomparables FALSE 也许我不明白它应该如何工作 无论如何 我正在寻找一个巧妙的解决方案 以仅保留与另一列相同的唯一列 或行
  • 在 R 格子包中微调点图

    我正在尝试为不同的数据集和不同的算法绘制一堆 ROC 区域 我有三个变量 方案 指定所使用的算法 数据集 是正在测试算法的数据集 以及 Area under ROC 我正在 R 中使用lattice库 命令如下 点图 方案 Area und
  • R 中的列乘以子字符串

    假设我有一个数据框 其中包含多个组件及其在多个列中列出的属性 并且我想对这些列运行多个函数 我的方法是尝试将其基于每个列标题中的子字符串 但我无法弄清楚如何做到这一点 下面是数据框的示例 Basket F Type 1 F Qty 1 F
  • 使用 Shiny 发布平行坐标图表时出现“错误:路径[1]="”:没有这样的文件或目录”

    我有一个似乎很常见但我还没有找到解决方案的问题 当尝试使用 rCharts Parcoords 发布 Web 应用程序时 出现以下错误 错误 路径 1 没有这样的文件或目录 奇怪的是 该应用程序在我的笔记本电脑上运行得很好 下面是我正在使用
  • 将阴影区域添加到五分位数之间的直方图中

    All 我有一个包含 2 个直方图的图表 其中我还绘制了代表第 20 40 60 和 80 个百分位数的线条 下面的代码使用虚拟数据重现了类似的图表 data lt rbind data frame x rnorm 1000 0 1 g o
  • 旋转 Markdown 的表格 pdf 输出

    我想将 pdf 上的表格输出旋转 90 度 我正在使用 Markdown 生成报告并kable循环显示表格 如果可以的话我想继续使用kable因为还有很多其他依赖于它的东西我没有包含在这个 MWE 中 这是一个简单的例子 使用iris数据集
  • 在 Rcpp 中使用其他包中的 C 函数

    我试图从 C 函数中的 cubature 包调用 C 例程来执行多维积分 我试图重现的基本 R 示例是 library cubature integrand lt function x sin x adaptIntegrate integr
  • 如何使用 SparkR 1.6.0 写入 JDBC 源?

    使用 SparkR 1 6 0 我可以使用以下代码从 JDBC 源读取数据 jdbc url lt jdbc mysql localhost 3306 dashboard user
  • 任意列中包含字符串的子集行

    我有一个如下所示的数据集 Col1 Col2 Col3 abckel NA 7 jdmelw njabc NA 8 jdken jdne 如何对数据集进行子集化 使其仅保留包含字符串 abc 的行 最终预期输出 Col1 Col2 Col3
  • 如何使用 tidymodels 和工作流集在同一数据集上拟合多个不同的线性模型

    我想评估同一数据集上多个 主要是 线性回归模型的性能 我想也许使用tidymodels包连同workflowsets workflow set 可能会起作用 我按照这个例子here https workflowsets tidymodels
  • 麦当劳 omega:R 中的警告

    我正在计算几种不同尺度的欧米茄 并在 R 中使用不同的 omega 函数获取不同比例的不同警告消息 我的问题是如何解释这些警告以及报告检索到的 omega 统计数据是否安全 当我使用 从 alpha 到 omega 内部一致性估计普遍问题的
  • 线性判别分析图

    如何将样本 ID 行号 作为标签添加到此 LDA 图中的每个点 library MASS ldaobject lt lda Species data iris plot ldaobject panel function x y points

随机推荐

  • Ember.js 将现有记录克隆到存储中

    我正在努力思考 Ember js 会喜欢的概念 我想要的是以下内容 我现在有一个现有的 Ember 数据模型 名为Article 让我们说id共 1 个将显示在 article 1 当用户点击 新建 按钮时 他们将转换到 article n
  • 如何在 tkinter 窗口顶部添加问号 [?] 按钮

    我想为我的 python tkinter 项目创建一个窗口 该窗口顶部有一个问号按钮 如下所示 无论如何我可以做到这一点吗 我想我已经成功了 from PIL import Image ImageTk import tkinter as t
  • 哪个 haskell 库可以让我将 2D 数组/向量保存到 png/jpg/gif... 文件?

    我正在玩哈斯克尔 从简单的绘图程序开始 以弄湿我的脚 我需要一个库 可以让我将 2D 数组 向量保存到图像文件中 我不想写颜色列表 我想使用用于数组 向量之类的计算的容器 并且可以 嗯 almost 自动并行化 EDIT存储彩色图像的能力是
  • ModelForm 中的 DurationField 格式

    我有一个包含持续时间字段的 Django 模型 class Entry models Model duration models DurationField 我想使用 ModelForm 为该模型渲染一个表单 class EditEntry
  • 为什么 hash() 在 python3.4 下比 python2.7 慢

    我正在使用 timeit 进行一些性能评估 发现 python 2 7 10 和 python 3 4 3 之间的性能下降 我把范围缩小到hash 功能 蟒蛇2 7 10 gt gt gt import timeit gt gt gt ti
  • 在网页中添加Google搜索

    我想向静态网站添加搜索 最简单的方法是通过将 site www acme com 附加到实际查询中来简单地查询 Google 以便 Google 将搜索限制到该网站 理想情况下 我想在浏览器中执行此操作 以避免在服务器上安装 PHP 使用表
  • PySpark 根据名称将列表分解为多列

    您好 我正在处理一种稍微困难的文件格式 我正在尝试清理该格式以供将来处理 我一直在使用 Pyspark 将数据处理成数据帧 该文件看起来类似于 AA 1234 ZXYW BB A 890 CC B 321 AA 1234 LMNO BB D
  • 将文件夹从主包复制到 iPhone 中的文档目录

    我有一个应用程序 其中我的主包中有一个名为 Images 的文件夹 在此文件夹中还有另一个名为 Images1 的文件夹 其中包含一些图像 当我的应用程序启动时 我想要文档目录中的文件夹 图像 我想从文件夹 Images1 中获取图像 但我
  • 弦乐实习

    在下面的代码中 我正在检查对象引用的相等性 string x Some Text string y Some Other Text string z Some Text Console WriteLine object ReferenceE
  • 转换为 ARC - LLVM 编译器 3.0 错误

    我打开了我的一个旧项目并选择Convert to Objective C ARC从编辑 重构菜单 我收到以下错误 Apple LLVM compiler 3 0 Error Error in format of file Users myU
  • XPath:从子节点获取父节点

    我需要获取子节点的父节点title 50 目前我只使用 title 50 我怎样才能得到它的父母 结果应该是store node
  • 如何使用 Webpack 和 Angular2 包含外部 css 文件?

    我正在尝试使用 Webpack 添加对 Angular2 中 CSS 文件的外部引用 我的CSS定义为 test css loader style loader css loader 在我的 webpack config js 文件中 在打
  • Ruby:将转义字符串写入 YAML

    下列 require yaml test I m a b d string File open test yaml w do out out write test to yaml end 输出 this is a b d string 我怎
  • Lucene.Net 写/读同步

    我可以写 与IndexWriter 在打开阅读时将新文档放入索引 使用IndexReader 或者我必须在写作之前关闭阅读 我可以阅读 搜索文档吗 使用IndexReader 在索引中 当它打开用于写入时 与IndexWriter 或者我必
  • 扭曲应用程序的 Web 界面

    我有一个用 Twisted 编写的应用程序 我想添加一个 Web 界面来控制和监视它 我需要大量的动态页面来显示当前状态和配置 因此我希望有一个框架至少提供一种具有继承和一些基本路由的模板语言 因为我正在使用 Twisted 无论如何我想使
  • Firebase 更改显示在谷歌登录警报上的应用程序名称?

    我有一个 firebase 项目 但不知何故我输错了应用程序名称 有没有办法更改谷歌登录警报上显示的应用程序名称 您应该更改项目中的产品名称
  • 如何在 ASP.NET Core 中的自定义 TagHelper 中渲染 Razor 模板?

    我正在创建一个自定义 HTML 标记帮助程序 public class CustomTagHelper TagHelper HtmlAttributeName asp for public ModelExpression DataModel
  • 如何删除名称以“-”开头的文件[重复]

    这个问题在这里已经有答案了 在脚本中出现错误后 我最终得到了一个名称以破折号开头的文件 myfile txt 到目前为止我尝试过 rm myfile txt rm illegal option m usage rm f i dPRrvW f
  • 使用 this-> 访问成员是否有任何开销?

    当访问某个类的成员时 我可以使用例如 this gt myVar 10 或者我可以写 myVar 10 我喜欢用this gt 因为它显式声明该变量是此类的成员 但是与仅使用变量名本身相比 它是否会导致任何开销 作为替代方案 我可以向变量添
  • 从 data.frame 或 data.table 构建方形邻接矩阵

    我正在尝试建立一个方形邻接matrix from a data table 这是我已经拥有的可重现的示例 require data table require plyr require reshape2 Build a mock data