2014-12-05 73 views
-3

重塑數據幀,報頭的值列值I具有類似於以下結構如何作爲R

date  Obj A  Obj B  Obj C 
12/12/2001  2  3   4 
11/12/2001  5  7   6 

一個數據集,我想他們重塑成如下結構,用於面板的情節在GGPLOT2

date  value  factor 
12/12/2001  2  Obj A 
11/12/2001  5  Obj A 
12/12/2001  3  Obj B 
11/12/2001  7  Obj B 
12/12/2001  4  Obj C 
11/12/2001  6  Obj C 

是否有更簡單的方法/軟件包來執行此操作,而不是將子集數據和逐個數據綁定在一起? 感謝您的幫助

+0

參見'reshape2(熔融/鑄造)'或'tidyr(聚集/ spread)'包或者只是基本函數'reshape()'。搜索從「寬」到「高」格式的幫助。這是一個非常常見的操作。 – MrFlick 2014-12-05 21:40:14

+0

感謝您的指針。我用融化(data.frame,id =「date」)來重新整形數據從寬到高。 – DonDyck 2014-12-08 20:06:27

回答

2

在基R,如果將被重新成形的值不factor S,也可以只使用stack

cbind(mydf[1], stack(mydf[-1])) 
#   date values ind 
# 1 12/12/2001  2 ObjA 
# 2 11/12/2001  5 ObjA 
# 3 12/12/2001  3 ObjB 
# 4 11/12/2001  7 ObjB 
# 5 12/12/2001  4 ObjC 
# 6 11/12/2001  6 ObjC 
2

正如MrFlick所說,這是R中的常見操作。但是,如果您不熟悉R,可能有點難以弄清楚如何執行此操作。在這裏,我想給你一個使用tidyr包的例子。請注意,您不希望在列名中留出空間。

library(dplyr) 
library(tidyr) 

# Create your data 
mydf <- as_data_frame(list(date = c("12/12/2001", "11/12/2001"), 
          ObjA = c(2, 5), 
          ObjB = c(3, 7), 
          ObjC = c(4, 6))) 

# Transform your data. You have your data, names for key and value columns. 
# As you see column names except date are in factor, and numbers are in value. 

gather(mydf, factor, value, -date) 

#  date factor value 
#1 12/12/2001 ObjA  2 
#2 11/12/2001 ObjA  5 
#3 12/12/2001 ObjB  3 
#4 11/12/2001 ObjB  7 
#5 12/12/2001 ObjC  4 
#6 11/12/2001 ObjC  6