[英]How to combine a list and a matrix into a dataframe
因此,我有一個關於荷蘭海岸的大型數據集,他們將荷蘭海岸划分為不同區域,在這些區域中,沿着海灘有多個橫斷面,他們每5米測量一次海拔。 他們根據彼此之間的距離命名了不同的樣帶。
該數據位於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頻率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文件,也許我沒有以正確的方式進行傳輸...此外,我的數據集當然更大,這只是一個小示例看起來像。 如果我能提供更多信息,請說出來。
a
和b
包含不同的數據類型,因此您不應將它們組合成矩陣。 將它們分開會使代碼更簡單。
你可以轉換a
從形式廣泛使用長型melt
從reshape2
。
library(reshape2)
cbind(melt(a), rep(b, each = nrow(a)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.