0

次のデータフレームがあります:

    T  S    V
1  s0  A  2.5
2  s1  A    1
3  s2  A    3
4  s0  B  5.6
5  s1  B    7
6  s0  C    8

私はそれを次のように変えたい:

   s0  s1  s2
A 2.5   1   3
B 5.6   7   0
C   8   0   0

で使用できるようにしchisq.testます。

私は次のことを試しましたが、これは発生のみを考慮し、値は考慮しません:

table(d$T, d$S)
4

1 に答える 1

5

試す:

xtabs(V ~ S + T, data=d)  #

あなたは実際には分割表の定義を少し広げていますが、レベルが繰り返されない限り、分数値に問題はありませんでした。適切な集計関数を使用する必要がある場合tapply、欠損因子レベルにゼロが必要な場合は NA を「修正」または「ゼロアウト」する必要があります。

> td <- tapply(d$V, list(d$S, d$T), sum)
> td[is.na(td) ] <- 0
> td
   s0 s1 s2
A 2.5  1  3
B 5.6  7  0
C 8.0  0  0

この「ロング」から「ワイド」への変換には、他にもいくつかの方法があります。plyr パッケージには、そのメソッドのより一貫した構文があります。dcastplyrの関数を見てください。base-R にもreshape機能があり、動作例の SO を検索します。スピードが必要になった場合、このdata.tableパッケージは一見の価値があります。plyr とは構文が異なり、少し精神的な調整が必要ですが、「パワー ユーザー」の間で支持を得ています。

于 2012-11-29T18:36:41.003 に答える