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