繁体   English   中英

重塑r中的矩阵

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM