2014-03-28 51 views
0

我正在嘗試使用reshape2庫重新組織我的數據幀。即使有說服力,我也無法獲得預期的結果。重新組織一個數據幀

這是我的data.frame

> mydata     
     Destination S1 S2 S3 S4 
    1   D1 94 87 84 75 
    2   D2 94 87 84 75 
    3   D3 94 87 84 75 
    4   D4 10 95 92 83 

這是我期待的。

Source Destination Value 
    S1  D1  94 
    S2  D1  87 
    S3  D1  84 
    S4  D1  75 
    S1  D2  94 
    S2  D2  87 
    S3  D2  84 
    S4  D2  75 
    S1  D3  94 
    S2  D3  87 
    S3  D3  84 
    S4  D3  75 
    S1  D4  10 
    S2  D4  95 
    S3  D4  92 
    S4  D4  83 

我試着調換data.frame,使用如下:

> mydata.T <- t(mydata[,2:ncol(mydata)]) 
> 
> mydata.T 
S1 94 94 94 10 
S2 87 87 87 95 
S3 84 84 84 92 
S4 75 75 75 83 

melt試過,但我無法得到確切的結果。

有人可以幫我嗎?

回答

1

在您的data.frame上使用t轉帳出現了什麼問題?

如果你想使用「reshape2」,你可以嘗試以下方法:

mydataLong <- melt(mydata, id.vars="Destination") 
mydataLong 
# Destination variable value 
# 1   D1  S1 94 
# 2   D2  S1 94 
# 3   D3  S1 94 
# 4   D4  S1 10 
# 5   D1  S2 87 
# 6   D2  S2 87 
# 7   D3  S2 87 
# 8   D4  S2 95 
# 9   D1  S3 84 
# 10   D2  S3 84 
# 11   D3  S3 84 
# 12   D4  S3 92 
# 13   D1  S4 75 
# 14   D2  S4 75 
# 15   D3  S4 75 
# 16   D4  S4 83 

在基礎R,你可以嘗試長輸出如下:

cbind(mydata[1], stack(mydata[-1]), row.names = NULL) 

如果你想該緊湊換位輸出,你可以這樣做:

dcast(mydataLong, variable ~ Destination) 
# variable D1 D2 D3 D4 
# 1  S1 94 94 94 10 
# 2  S2 87 87 87 95 
# 3  S3 84 84 84 92 
# 4  S4 75 75 75 83 
+0

我試過這@Ananda Mahto。但是,我想將4 * 4矩陣數據拆分成16行 – Raghu

+0

@Raghu,然後停在'mydataLong'。 – A5C1D2H2I1M1N2O1R2T1

+0

是@Ananda Mahto。你是對的。使用Melt後,我沒有檢查並在某處使用變量。我錯過了那裏。非常感謝。這對我來說很好。 – Raghu

0
data.frame(Destination=mydata$Destination, Value=as.vector(data.matrix(mydata[-1]))) 

我的感覺是,這是來自一個表操作本應該是:

as.data.frame(table(something)) 
+0

這不會導致只有兩列,不是所需的三列? – A5C1D2H2I1M1N2O1R2T1

+0

對吧。如果它不對稱,我可能會看到它更好。 'cbind(df [1],stack(...))'更好。 –

+0

...正如我所說的:-) – A5C1D2H2I1M1N2O1R2T1