2015-01-21 81 views
-1

我試過在網站上尋找這樣的解決方案,但重塑數據仍然困擾着我。我希望有人能幫忙! :) 基本上,我的數據是這樣的:重塑R中的數據幀

Item Condition1 Condition2 Condition3 
A 1   2   3 
B 1   2   3 
C 1   2   3 
D 1   2   3 

而且我希望它看起來像這樣

Item Condition 
A 1 
A 2 
A 3 
B 1 
B 2 
B 3 
C 1 
C 2 
C 3 
D 1 
D 2 
D 3 

從我的理解,似乎有可能做到這一點的不止一種方法,但我還沒有發現一個可行的方法!

+3

什麼是你已經試過了*沒有*工作,因爲,是的,這可以通過多種方式實現的方式。 – A5C1D2H2I1M1N2O1R2T1 2015-01-21 07:14:07

+1

而當你的輸出有A 1,A 2,A 3時,是1/2/3,因爲列中的值或者列頭中的數值Condition1/Condition2/Condition3? – Ricky 2015-01-21 07:15:36

回答

6

是的。在R中有幾種方法可以做到這一點。其中拿到訂單,你在你的問題

library(data.table) 
as.data.table(mydf)[, list(Condition = unlist(.SD)), by = Item] 

library(splitstackshape) 
merged.stack(mydf, var.stubs = "Condition", 
      sep = "var.stubs")[, .time_1 := NULL][] 

data.frame(Item = rep(mydf[[1]], 
         each = ncol(mydf[-1])), 
      Condition = c(t(mydf[-1]))) 

選項需要兩個步驟,要麼刪除列或重新排序行

reshape(mydf, direction = "long", idvar = "Item", 
     varying = 2:ncol(mydf), sep = "") 
指定

選項


cbind(mydf[1], stack(mydf[-1])) 

library(tidyr) 
gather(mydf, var, val, Condition1:Condition3) 
1
require(reshape2) 

df<-data.frame(Item=LETTERS[1:4], 
       Condition1=1, 
       Condition2=2, 
       Condition3=3) 
reshapedf<-melt(df,id=1)[-2] 
reshapedf<-reshapedf[with(reshapedf,order(Item)),] 
colnames(reshapedf)[2]<-"Condition" 

我相信還有其他方法可以做到這一點。探索並玩得開心:)