如何使用R将有向数据集转换为矩阵

时间:2014-08-06 13:51:31

标签: r matrix transformation

我在R中有一个数据集,如下所示:

ID LinkedTo
1  Null
2  1
3  1
4  3
5  4

我希望将其转换为类似于此的矩阵:

0 0 0 0 0
1 0 0 0 0
1 0 0 0 0
0 0 1 0 0
0 0 0 1 0

5 个答案:

答案 0 :(得分:1)

另一种选择是将有向数据集建模为有向图并提取邻接矩阵。

library(igraph)

dat <- read.table(text='ID LinkedTo
2  1
3  1
4  3
5  4',header=TRUE)

gg <- graph.data.frame(dat)
 as.matrix(get.adjacency(gg))
  2 3 4 5 1
2 0 0 0 0 1
3 0 0 0 0 1
4 0 1 0 0 0
5 0 0 1 0 0
1 0 0 0 0 0

答案 1 :(得分:0)

如果在数据集中将NA替换为“Null”,则会更方便。像

这样的东西
i <- structure(list(ID = c(1, 2, 3, 4, 5), 
    LinkedTo = c(NA, 1, 1, 3, 4)), 
    .Names = c("ID", "LinkedTo"),
    row.names = c(NA, -5L), class = "data.frame")
i
#   ID LinkedTo
# 1  1       NA
# 2  2        1
# 3  3        1
# 4  4        3
# 5  5        4

然后你可以做

m <- matrix(0, nrow(i), nrow(i))
m[i$ID + (i$LinkedTo - 1) * nrow(i)] <- 1

(如果i是矩阵,它的工作方式相同,但您必须将i$IDi$LinkedTo更改为i[, 1]i[, 2] resp )

答案 2 :(得分:0)

你可以先用零替换null,我想。 然后你可以做一点循环:

data.frame(id=1:5, pos=sample(1:5))->df
matrix(nrow=max(nrow(df)),ncol= max(df$id),data=0)->m
for (i in 1:nrow(df)){
  m[i,df$pos[i]]<-1
  }

答案 3 :(得分:0)

使用@konvas i数据集

i[,2][is.na(i[,2])] <- 0
m <- matrix(0, nrow(i), nrow(i))
m[as.matrix(i)] <- 1
m
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    0    0    0    0    0
#[2,]    1    0    0    0    0
#[3,]    1    0    0    0    0
#[4,]    0    0    1    0    0
#[5,]    0    0    0    1    0

答案 4 :(得分:0)

table如果将其与factor结合使用也应该有用。 (我说&#34;应该&#34;因为你的条件没有明确规定,你的样本数据不可复制。)

使用@ konvas&#34; i&#34;示例数据,请尝试:

> table(i$ID, factor(i$LinkedTo, 1:5))

    1 2 3 4 5
  1 0 0 0 0 0
  2 1 0 0 0 0
  3 1 0 0 0 0
  4 0 0 1 0 0
  5 0 0 0 1 0