簡體   English   中英

如何將列表和矩陣組合到數據框中

[英]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文件,也許我沒有以正確的方式進行傳輸...此外,我的數據集當然更大,這只是一個小示例看起來像。 如果我能提供更多信息,請說出來。

ab包含不同的數據類型,因此您不應將它們組合成矩陣。 將它們分開會使代碼更簡單。

你可以轉換a從形式廣泛使用長型meltreshape2

library(reshape2)
cbind(melt(a), rep(b, each = nrow(a)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM