我有这些数据:
> 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
....
我无法理解如何在没有循环的情况下做到这一点......
答案 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
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