gpt4 book ai didi

r - 如何基于 2 列数据框创建具有 1 和 0 的矩阵

转载 作者:行者123 更新时间:2023-12-04 11:54:30 27 4
gpt4 key购买 nike

这是我的数据的示例(我实际上有 1300 条线,或两个不同节点之间的 1300 个连接/边):

node# node#
1 3
1 4
2 4
2 5
3 4
3 5

我目前在数据框中拥有上述数据。这代表一个网络,其中汽车可以从节点 1 到 3 或 1 到 4,从节点 2 到 4 或节点 2 到 5 等。我想创建一个如下所示的矩阵:
>      [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 0 0 0 0 0 0
[2,] 0 0 0 0 0 0
[3,] 0 0 0 0 0 0
[4,] 0 0 0 0 0 0
[5,] 0 0 0 0 0 0

我被卡住的地方:我想从离开节点向矩阵中输入 1s,在同一列中的目标节点的矩阵中输入 -1。所以对于这个 6 节点连接的数据框,矩阵看起来像:
>      [,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 0 0 0 0
[2,] 0 0 1 1 0 0
[3,] -1 0 0 0 1 1
[4,] 0 -1 -1 0 -1 0
[5,] 0 0 0 -1 0 -1

但就像我说的,我有 1300 多个连接,所以手动执行此操作需要一段时间。所以我猜 matrix(0, 5, 1300) 会是我开始的地方?

最佳答案

您可以使用 2 列索引矩阵索引矩阵的特定行/列对。这提供了一种设置所有 1 然后设置所有 -1 的便捷方法:

mat <- matrix(0, nrow=max(dat), ncol=nrow(dat))
mat[cbind(dat$node1, seq_len(nrow(dat)))] <- 1
mat[cbind(dat$node2, seq_len(nrow(dat)))] <- -1
mat
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 1 1 0 0 0 0
# [2,] 0 0 1 1 0 0
# [3,] -1 0 0 0 1 1
# [4,] 0 -1 -1 0 -1 0
# [5,] 0 0 0 -1 0 -1

(感谢@PierreLafortune 在数据框上调用 max 的技巧!)

数据:
dat <- data.frame(node1=c(1, 1, 2, 2, 3, 3), node2=c(3, 4, 4, 5, 4, 5))

关于r - 如何基于 2 列数据框创建具有 1 和 0 的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35881986/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com