1

次のような長いテーブルがあるとします。

A <- rep(c("a","b","c","d"),each=4)
B <- rep(c("e","f","g","h"),4)
C <- rep(c("i","j"),8)
D <- rnorm(16)
df <- data.frame(A,B,C,D)
head(df)

   A  B  C        D
1  a  e  i  -0.18984508
2  a  f  j  -1.82703822
3  a  g  i  -0.17307580
4  a  h  j  -1.38104238
5  b  e  i   0.08699983
6  b  f  j  -0.36442461

列Aと列Bの各要素が列のタイトルになるように、長い表を幅の広い形式に変更したいと考えています。各行は、要素が存在するかどうかを示す 1 または 0 である必要があります。列 C と D は同じままです。目的のテーブルは次のようなものです。

C           D a b e f g h
i -0.18984508 1 0 1 0 0 0
j -1.82703822 1 0 0 1 0 0
i -0.17307580 1 0 0 0 1 0
j -1.38104238 1 0 0 0 0 1
i  0.08699983 0 1 1 0 0 0
j -0.36442461 0 1 0 1 0 0
4

1 に答える 1

5

reshape2これは、パッケージで実行できる再形成の形式です。

library("reshape2")
dcast(melt(df, id.vars=c("C", "D")), C+D~value, fun.aggregate=length)

を与える

   C           D a b c d e f g h
1  i -1.44485242 0 1 0 0 0 0 1 0
2  i -0.80834639 0 0 0 1 0 0 1 0
3  i -0.15202085 0 0 0 1 1 0 0 0
4  i -0.05626233 1 0 0 0 1 0 0 0
5  i  0.12031754 1 0 0 0 0 0 1 0
6  i  0.62206658 0 0 1 0 0 0 1 0
7  i  0.77101891 0 1 0 0 1 0 0 0
8  i  1.38752097 0 0 1 0 1 0 0 0
9  j -2.52137154 0 0 0 1 0 0 0 1
10 j -0.53231537 0 1 0 0 0 0 0 1
11 j -0.30178539 1 0 0 0 0 0 0 1
12 j -0.29823112 1 0 0 0 0 1 0 0
13 j -0.12988540 0 1 0 0 0 1 0 0
14 j  0.00517754 0 0 1 0 0 1 0 0
15 j  0.51452289 0 0 1 0 0 0 0 1
16 j  0.53260223 0 0 0 1 0 1 0 0

順序は元のデータ セットと同じではありませんが、それが重要な場合は順序列を入れて、それを実行し、最後に並べ替えます。

于 2013-03-15T21:30:11.617 に答える