所以我有一个关于荷兰海岸的大型数据集,他们将荷兰海岸划分为不同的区域,在这些区域沿海滩有多个横断面,他们每隔五米测量一次海拔高度。他们根据彼此的距离命名了不同的横断面。
这个数据是在netcdf文件中,但我终于得到了一个非常好的矩阵,看起来像这样:
> a<-matrix(c(100,80,60,40,200,180,160,140),nrow=4,ncol=6)
> colnames(a) <- c(100,200,300,400,100,101)
> rownames(a) <- c(500,400,300,200)
> a
100 200 300 400 100 101
500 100 200 100 200 100 200
400 80 180 80 180 80 180
300 60 160 60 160 60 160
200 40 140 40 140 40 140
列名是海滩沿岸的不同横断面,行名称是跨岸距离。
然而,不同横断面的“名称”通常对于荷兰海岸的不同区域是相同的。现在我有一个区域列表,我可以很好地将其放入矩阵中:
> b <- c(2,2,2,2,3,3)
> c<-rbind(b,a)
> c
100 200 300 400 100 101
b 2 2 2 2 3 3
500 100 200 100 200 100 200
400 80 180 80 180 80 180
300 60 160 60 160 60 160
200 40 140 40 140 40 140
然而,当我制作这个矩阵的数据帧时,我得到了这个:
> d<-as.data.frame(as.table(c))
> d
Var1 Var2 Freq
1 b 100 2
2 500 100 100
3 400 100 80
4 300 100 60
5 200 100 40
6 b 200 2
7 500 200 200
8 400 200 180
9 300 200 160
10 200 200 140
11 b 300 2
12 500 300 100
13 400 300 80
14 300 300 60
15 200 300 40
16 b 400 2
17 500 400 200
18 400 400 180
19 300 400 160
20 200 400 140
21 b 100 3
22 500 100 100
23 400 100 80
24 300 100 60
25 200 100 40
26 b 101 3
27 500 101 200
28 400 101 180
29 300 101 160
30 200 101 140
我想要的是b(所以不同的沿海地区)是一个额外的列。
所以它看起来像这样:
Var1 Var2 Freq var3
2 500 100 100 2
3 400 100 80 2
4 300 100 60 2
5 200 100 40 2
7 500 200 200 2
8 400 200 180 2
9 300 200 160 2
10 200 200 140 2
12 500 300 100 2
13 400 300 80 2
14 300 300 60 2
15 200 300 40 2
17 500 400 200 2
18 400 400 180 2
19 300 400 160 2
20 200 400 140 2
22 500 100 100 3
23 400 100 80 3
24 300 100 60 3
25 200 100 40 3
27 500 101 200 3
28 400 101 180 3
29 300 101 160 3
30 200 101 140 3
我不确定如何做到这一点,这些数据来自netcdf文件,也许我没有以正确的方式传输...此外我的数据集当然要大得多,这只是一个小的示例看起来如何。如果我能提供更多信息,请说出来。
答案 0 :(得分:0)
a
和b
包含不同的数据类型,因此您不应将它们组合在一个矩阵中。保持它们分开也会使您的代码更简单。
您可以使用a
中的melt
将reshape2
从宽格式转换为长格式。
library(reshape2)
cbind(melt(a), rep(b, each = nrow(a)))