【发布时间】:2019-09-24 17:46:04
【问题描述】:
我有一个名为 d 的 n x n 矩阵,其中大部分填充了 NA 值,但有一些随机值分布在各处。
我需要创建一个名为 ds 的新矩阵,其中包含三个名为 head、tail 和 weight 的列,其中 weight 是在矩阵 d 中找到的值,head 和 tail 分别是d 找到了 weight 的特定值。
矩阵d:
n = 1000
d = runif(n*n)
d[d < 0.80] = NA
d = matrix(d,nrow=n,ncol=n) #reshape the vector
diag(d) = NA # no self-loops
d[upper.tri(d)] = t(d)[upper.tri(d)] # undirected graphs are symmetric
str(d)
num [1:1000, 1:1000] NA NA NA 0.861 NA ...
str(ds) 和 head(ds) 的期望输出:
str(ds)
num [1:99858, 1:3] 1 1 1 1 1 1 1 1 1 1 ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:3] "head" "tail" "weight"
head(ds)
head tail weight
[1,] 1 15 0.9205357
[2,] 1 16 0.9938016
[3,] 1 29 0.9480700
上述矩阵中返回的实际值并不重要,因为它们是随机生成的,但我的最终输出应该看起来相似。
我尝试过的:
head = c()
tail = c()
weight = c()
for (i in 1:n)
for (j in 1:n)
if (is.na(d[i][j]) == FALSE)
head[i] = i
tail[i] = j
weight[i] = d[i][j]
ds = cbind(head, tail, weight)
但是,这会导致以下结果:
str(ds)
num [1:1000, 1:3] NA NA 3 NA NA NA NA NA NA NA ...
- attr(*, "dimnames")=List of 2
..$ : NULL
..$ : chr [1:3] "head" "tail" "weight"
head(ds)
head tail weight
[1,] NA NA NA
[2,] NA NA NA
[3,] 3 NA NA
[4,] NA NA NA
[5,] NA NA NA
[6,] NA NA NA
再次,我如何在矩阵 d 中搜索非 NA 值,当找到它们时,用找到的行更新矩阵 ds,找到它的列,以及值本身?
【问题讨论】:
标签: r for-loop matrix graph adjacency-matrix