将数据帧转换为R中的隶属网络

时间:2014-09-11 06:13:11

标签: r igraph sna

我的数据框格式如下:

name workplace
a     A
b     B
c     A
d     C
e     D
....

我想将此数据框转换为R中的联属网络,格式为

    A B C D ...
a   1 0 0 0
b   0 1 0 0
c   1 0 0 0
d   0 0 1 0
e   0 0 0 1
...

我使用了以下程序:

for (i in 1:nrow(A1)) {  
  a1[rownames(a1) == A1$name[i],
     colnames(a1) == A1$workplace[i]] <- 1
}

其中A1是数据框,a1是隶属网络。但是,由于我有一个大数据帧,上面的程序运行速度很慢。有没有一种有效的方法可以避免循环数据转换?

非常感谢!

2 个答案:

答案 0 :(得分:3)

如果您的数据df只是执行:

as.data.frame.matrix(table(df))
#   A B C D
# a 1 0 0 0
# b 0 1 0 0
# c 1 0 0 0
# d 0 0 1 0
# e 0 0 0 1

答案 1 :(得分:0)

可能这也有帮助:

 m1 <- model.matrix(~0+workplace, data=dat)
 dimnames(m1) <- lapply(dat, unique)
 as.data.frame(m1)
 #  A B C D
 #a 1 0 0 0
 #b 0 1 0 0
 #c 1 0 0 0
 #d 0 0 1 0
 #e 0 0 0 1