不使用循环重新格式化数据框

时间:2014-05-24 17:13:03

标签: r

我有这些数据:

> dat
      NON.ROAD NONPOINT ON.ROAD  POINT
1999   522.94  2107.62  346.82  296.80
2002   240.85  1509.50  134.31  569.26
2005   248.93  1509.50  130.43 1202.49
2008    55.82  1373.21   88.28  344.98

我需要将其重新格式化为这样的data.frame:

> dat2
NUMBER   YEAR   TYPE
522.94   1999  NON.ROAD
2107.62  1999  NONPOINT
....

我无法理解如何在没有循环的情况下做到这一点......

1 个答案:

答案 0 :(得分:2)

您可以使用melt中的reshape2将数据设置为长格式:

library(reshape2)
dat$YEAR <- rownames(dat)
melt(dat,id='YEAR')

 YEAR variable   value
1  1999 NON.ROAD  522.94
2  2002 NON.ROAD  240.85
3  2005 NON.ROAD  248.93
4  2008 NON.ROAD   55.82
5  1999 NONPOINT 2107.62
6  2002 NONPOINT 1509.50
7  2005 NONPOINT 1509.50
8  2008 NONPOINT 1373.21
9  1999  ON.ROAD  346.82
10 2002  ON.ROAD  134.31
11 2005  ON.ROAD  130.43
12 2008  ON.ROAD   88.28
13 1999    POINT  296.80
14 2002    POINT  569.26
15 2005    POINT 1202.49
16 2008    POINT  344.98

R碱溶液(较慢):

data.frame(stack(dat),year=rownames(dat))
    values      ind year
1   522.94 NON.ROAD 1999
2   240.85 NON.ROAD 2002
3   248.93 NON.ROAD 2005
4    55.82 NON.ROAD 2008
5  2107.62 NONPOINT 1999
6  1509.50 NONPOINT 2002
7  1509.50 NONPOINT 2005
8  1373.21 NONPOINT 2008
9   346.82  ON.ROAD 1999
10  134.31  ON.ROAD 2002
11  130.43  ON.ROAD 2005
12   88.28  ON.ROAD 2008
13  296.80    POINT 1999
14  569.26    POINT 2002
15 1202.49    POINT 2005
16  344.98    POINT 2008