gpt4 book ai didi

r - 根据组成员资格创建矩阵

转载 作者:行者123 更新时间:2023-12-01 11:26:24 25 4
gpt4 key购买 nike

我想创建一个矩阵来指示来自数据框的组成员资格。例如,一个 NxN 矩阵,其中 1 表示一个社区与另一个社区位于同一城市,0 表示这些社区属于不同城市。例如:

hoodid <- c(1:10) 
cityid <- c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3)
df <- data.frame(hoodid, cityid)
df

# hoodid cityid
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 2
# 5 5 2
# 6 6 3
# 7 7 3
# 8 8 3
# 9 9 3
# 10 10 3

期望的结果是:

# 0 1 1 0 0 0 0 0 0 0
# 1 0 1 0 0 0 0 0 0 0
# 1 1 0 0 0 0 0 0 0 0
# 0 0 0 0 1 0 0 0 0 0
# 0 0 0 1 0 0 0 0 0 0
# 0 0 0 0 0 0 1 1 1 1
# 0 0 0 0 0 1 0 1 1 1
# 0 0 0 0 0 1 1 0 1 1
# 0 0 0 0 0 1 1 1 0 1
# 0 0 0 0 0 1 1 1 1 0

最佳答案

这个有效:

library(Matrix)
m = do.call(bdiag, lapply(
lengths(split(df$cityid, df$cityid)),
function(n) 1 - diag(n)
))

# 10 x 10 sparse Matrix of class "dgCMatrix"
#
# [1,] . 1 1 . . . . . . .
# [2,] 1 . 1 . . . . . . .
# [3,] 1 1 . . . . . . . .
# [4,] . . . . 1 . . . . .
# [5,] . . . 1 . . . . . .
# [6,] . . . . . . 1 1 1 1
# [7,] . . . . . 1 . 1 1 1
# [8,] . . . . . 1 1 . 1 1
# [9,] . . . . . 1 1 1 . 1
# [10,] . . . . . 1 1 1 1 .

这假设您的数据首先按 cityid 排序并且没有重复项或任何其他异常情况。

如果你想要普通矩阵,你可以as.matrix(m)

关于r - 根据组成员资格创建矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37009120/

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