2012-11-29 109 views
0

這裏是一個很小的問題。我這有以下數據幀:將數據框轉換爲寬表R

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) 

感謝,

回答

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 

有相當可能對這個「長」到「寬」 transformaltion工作沒其他方法。 plyr軟件包的方法語法更一致。看看plyr中的dcast函數。在base-R中還有reshape函數,搜索SO中有工作示例。如果你開始需要速度,data.table包值得一看。它與plyr有不同的語法,需要一點心理調整,但在「使用功率R」中獲得了一個跟隨。