在R中将数据框转换为关联网络

3
我有一个数据框,格式如下:
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个回答

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
这真的很酷。顺便说一下,我有一个纵向网络,所以在进行数据转换后,列维度在不同年份之间不同,例如,一年有1000列,而另一年有2000列。我想做的是使所有矩阵在各个年份的列维度相同。你会怎么做呢?非常感谢!!! - user2521514
1
你能提供一个实际的例子吗? - David Arenburg
当然。我按照以下方式执行了您的命令: for (i in 0:18) { a <- eval(parse(text=paste0("A",i))) assign(x=paste0("df", i), value = as.data.frame.matrix(table(a[,-3]))) } - user2521514
不,我的意思是提供实际数据,以便该解决方案能够正确运行。 - David Arenburg
好的。我有19个相同行数但不同列数的矩阵。例如,df1是 A B C a 1 0 0 b 0 1 0 c 1 0 0 d 0 0 1而df2是 A B D a 1 0 0 b 0 1 0 c 1 0 0 d 0 0 0我该如何将df1和df2转换为具有4列和4行的矩阵,例如 A B C D a b c d - user2521514
显示剩余3条评论

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接