1

この質問のタイトルが間違っていないとしても、混乱を招くことは承知しています。申し訳ありませんが、私がやろうとしていることを説明させてください:

# 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

*ここで、frn の値を、元の母集団のすべてのメンバーを含む行列、つまり 12 x 12 の行列に転送したいと考えています。そのマトリックスの値は、frn 5*5 マトリックスからのみ取得されます。

上部の行列から下部の行列を生成する方法がわかりません。

さまざまな方法 (iGraph を使用してエッジリストを介して進めるなど) またはループを実行することを考えましたが、実行する単一の代替手段は実際には得られませんでした。背景として知っておくことが重要かもしれません: 私の実際の行列はこれよりもはるかに大きく、この操作を何度も実行する必要があるため、効率的な解決策は素晴らしいでしょう. どうもありがとうございました。

4

3 に答える 3

0

最悪の解決策:ind = match(mysample,population)サンプルに対応する行と列のインデックス番号を提供するので、を実行して母集団ネットワーク行列popnを更新しpopn[ind,ind] = frnます。終わり。

于 2012-06-08T06:48:46.460 に答える
0

使用できるのは...スパース行列です。

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
于 2012-06-08T07:48:22.397 に答える
0
# create an empty matrix with NAs. You may have the full matrix already.
full_matrix <- matrix(rep(NA, population_size*population_size), nrow=population_size)
rownames(full_matrix) <- colnames(full_matrix) <- population
frn <- matrix(rbinom(mysample_size*mysample_size, 1, 0.4), nrow = mysample_size)
rownames(frn) <- colnames(frn) <- mysample
# Find the locations where they match
tmp <- match(rownames(frn), rownames(full_matrix))
tmp2 <- match(colnames(frn), colnames(full_matrix))

# do a merge
full_matrix[tmp,tmp2] <- frn
于 2012-06-08T05:50:25.247 に答える