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 是隶属网络。但是,由于我有一个很大的数据框,所以上面的程序运行很慢。有没有一种有效的方法可以避免数据转换中的循环?

非常感谢!

4

2 回答 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
于 2014-09-11T07:57:30.353 回答
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
于 2014-09-11T09:07:10.650 回答