[英]reshape a matrix in r
我有這個矩陣(下面給出了頭和尾),它的經度,經度和變量在美國從1948年1月到2004年12月開始:
# head of matrix
lon lat month value
1 -124.5 31.5 1980.1 NA
2 -123.5 31.5 1980.1 NA
3 -122.5 31.5 1980.1 NA
4 -121.5 31.5 1980.1 NA
5 -120.5 31.5 1980.1 NA
6 -119.5 31.5 1980.1 NA
# tail of matrix
lon lat month value
[129595,] -106.5 48.5 2004.12 0
[129596,] -105.5 48.5 2004.12 0
[129597,] -104.5 48.5 2004.12 71
[129598,] -103.5 48.5 2004.12 NA
[129599,] -102.5 48.5 2004.12 NA
[129600,] -101.5 48.5 2004.12 NA
我想將其重塑為這種形式,例如每年的1980年1月:
lon....> 31.5 32.5 33.5 .... 48.5
lat -101.5 value11 value12 value13
. -102.5 ....
. -103.5
. .
\/ . value ii
有什么辦法可以做到嗎?
> dat <- read.table(text="lon lat month value
+ -124.5 31.5 1980.1 2
+ -123.5 31.5 1980.1 3
+ -122.5 31.5 1980.1 4
+ -121.5 31.5 1980.1 5
+ -120.5 31.5 1980.1 6
+ -119.5 31.5 1980.1 7
+ -106.5 48.5 2004.12 0
+ -105.5 48.5 2004.12 0
+ -104.5 48.5 2004.12 71
+ -103.5 48.5 2004.12 8
+ -102.5 48.5 2004.12 9
+ -101.5 48.5 2004.12 0", header=TRUE)
> xtabs(value~lat+lon+month, data=dat, exclude="")
, , month = 1980.1
lon
lat -124.5 -123.5 -122.5 -121.5 -120.5 -119.5 -106.5 -105.5 -104.5 -103.5
31.5 2 3 4 5 6 7 0 0 0 0
48.5 0 0 0 0 0 0 0 0 0 0
lon
lat -102.5 -101.5
31.5 0 0
48.5 0 0
, , month = 2004.12
lon
lat -124.5 -123.5 -122.5 -121.5 -120.5 -119.5 -106.5 -105.5 -104.5 -103.5
31.5 0 0 0 0 0 0 0 0 0 0
48.5 0 0 0 0 0 0 0 0 71 8
lon
lat -102.5 -101.5
31.5 0 0
48.5 9 0
dcast
從reshape2是你在這種情況下的朋友。 假設您的data.frame稱為df
> library(reshape2)
> dcast(df, lat + month ~lon)
lat month -124.5 -123.5 -122.5 -121.5 -120.5 -119.5
1 31.5 1980.1 NA NA NA NA NA NA
讓我們用一些隨機值替換NA
看看它是如何工作的
> set.seed(1)
> df[,4 ] <- sample(20:60, 6)
> df # this is how the new df looks like
lon lat month value
1 -124.5 31.5 1980.1 30
2 -123.5 31.5 1980.1 34
3 -122.5 31.5 1980.1 42
4 -121.5 31.5 1980.1 54
5 -120.5 31.5 1980.1 27
6 -119.5 31.5 1980.1 52
> dcast(df, lat + month ~lon) # here's the job done by `dcast`
lat month -124.5 -123.5 -122.5 -121.5 -120.5 -119.5
1 31.5 1980.1 30 34 42 54 27 52
library(reshape2)
dcast(mat, id.var=NULL,formula = month+lon ~ lat, value.var="value")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.