R 将稀疏矩阵扩展/转换为更大的稀疏矩阵
我知道这个问题的标题即使没有错,也是令人困惑的。很抱歉,让我解释一下我想做什么:R 将稀疏矩阵扩展/转换为更大的稀疏矩阵,r,social-networking,sparse-matrix,R,Social Networking,Sparse Matrix,我知道这个问题的标题即使没有错,也是令人困惑的。很抱歉,让我解释一下我想做什么: # I have a population of individuals: population <- c("Adam", "Bob", "Chris", "Doug", "Emily", "Frank", "George","Harry", "Isaac", "Jim", "Kyle", "Louis") population_size <- length(population) # this is
# I have a population of individuals:
population <- c("Adam", "Bob", "Chris", "Doug", "Emily", "Frank", "George","Harry", "Isaac", "Jim", "Kyle", "Louis")
population_size <- length(population) # this is 12
# I then draw a sample from this population
mysample_size <- 5
mysample <- sample(population,mysample_size, replace=FALSE)
# I then simulate a network among the people in the sample
frn <- matrix(rbinom(mysample_size*mysample_size, 1, 0.4),nrow=n)
x[x<=0] <- 0
x[x>0] <- 1
rownames(frn) <- mysample
colnames(frn) <- mysample
#我有一群人:
填充#使用NAs创建一个空矩阵。你可能已经有完整的矩阵了。
完整矩阵Neatest解决方案:ind=match(mysample,population)
提供与样本对应的行和列的索引号,因此通过执行popn[ind,ind]=frn
更新总体网络矩阵popn
。完成。您可以使用。。。稀疏矩阵
library(Matrix)
# Make sure the columns match
population <- c( mysample, setdiff(population, mysample) )
ij <- which( frn != 0, arr.ind=TRUE )
m <- sparseMatrix(
i = ij[,1], j=ij[,2],
x = 1, # or frn[ij]
dim = length(population)*c(1,1),
dimnames = list(population, population)
)
m
库(矩阵)
#确保列匹配
人口什么是x
,这与这里的情况如何?和n
中的nrow=n
应该是nrow=mysample\u size
,对吗?谢谢您的编辑。你说得对。它应该是“nrow=mysample_size”,需要用frn替换x。是我的错。很抱歉谢谢你这么关注我,你可以。。。但是与直接操作相比,它有什么优势呢?如果矩阵那么小,没有优势,但是如果矩阵更大、更稀疏,它的内存效率更高。非常酷。谢谢。这也行得通(我已经开始研究Tim的解决方案)。出于总体原因,它在显示m时会抑制colnames。不知道为什么。我真的不喜欢因为这个原因不必要地依赖外部软件包——总是有各种各样的奇怪和不一致。在我的书中,明智的第一步总是看看是否有一种巧妙的方法来解决手头的问题,而不必加载任何其他内容。这很有效。这似乎太简单了,但它似乎正是我所需要的。真的很酷。非常感谢。这很有效。非常感谢你的支持。非常感谢。
library(Matrix)
# Make sure the columns match
population <- c( mysample, setdiff(population, mysample) )
ij <- which( frn != 0, arr.ind=TRUE )
m <- sparseMatrix(
i = ij[,1], j=ij[,2],
x = 1, # or frn[ij]
dim = length(population)*c(1,1),
dimnames = list(population, population)
)
m