我有这个矩阵(头部和尾部在下面给出),从1948年1月到2004年12月,它有美国的lat,lon和variable一段时间:
# 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
我有什么方法可以做到吗?
答案 0 :(得分:1)
> 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
答案 1 :(得分:1)
dcast
在这种情况下是你的朋友。假设您的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
答案 2 :(得分:0)
library(reshape2)
dcast(mat, id.var=NULL,formula = month+lon ~ lat, value.var="value")