2015-03-02 70 views
-3

我有一个数据与多列,我想堆叠它。我的数据看起来像将多个列堆叠成一列

January February March 

20.5733 47.3457 47.8473 
-9999 -9999 -9999 
18.8403 41.3779 44.6814 
23.0879 35.9153 41.216 
43.49 31.85 40.17 
-9999 -9999 -9999 
-9999 -9999 -9999 
15.1745 43.8709 46.5024 

,我需要的数据如下

Janaury 20.5733 
January -9999 
January 18.8403 
Janaury 23.0879 
January 43.49 
January -9999 
Janaury -9999 
January 15.1745 
February 47.3457 
February -9999 
February 41.3779 
February 35.9153 
February 31.85 
February -9999 
February -9999 
February 43.8709 
March 47.8473 
March -9999 
March 44.6814 
March 41.216 
March 40.17 
March -9999 
March -9999 
March 46.5024 

感谢 加文

+1

试试'library(reshape2); melt(df1)' – akrun 2015-03-02 17:33:34

+2

你试过'stack'吗? – A5C1D2H2I1M1N2O1R2T1 2015-03-02 17:33:55

回答

2

从你的问题标题纯粹去,看看stack,例如,stack(mydf)

这里是前10行:

> head(stack(mydf), 10) 
     values  ind 
1  20.5733 January 
2 -9999.0000 January 
3  18.8403 January 
4  23.0879 January 
5  43.4900 January 
6 -9999.0000 January 
7 -9999.0000 January 
8  15.1745 January 
9  47.3457 February 
10 -9999.0000 February 

热门软件包,包括 “reshape2” 和 “tidyr” 与该办法是这样的:

library(reshape2) 
melt(mydf) 

library(tidyr) 
gather(mydf, var, val, January:March)