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 に答える