【问题标题】:Change Lat & Lon vectors to matrix in R将 Lat & Lon 向量更改为 R 中的矩阵
【发布时间】:2014-12-05 01:11:07
【问题描述】:

我在 R 中有一些工作, 假设我有以下列数据

Lat Lon Var1 Var2 Var3

具有大量模式,因为数据是矢量,我想将该数据更改为网格矩阵。例如

    Lon Lon Lon
Lat Var1 Var1 Var1
Lat Var1 Var1 Var1
Lat Var1 Var1 Var1

R 中最有效的命令是什么,谢谢

【问题讨论】:

标签: r matrix vector


【解决方案1】:

你也可以使用reshape2中的acast

library(reshape2)
acast(df, Lat~Lon, value.var='Var1')

如果你想改变水平/垂直位置

m1 <- acast(df, Lon~Lat, value.var='Var1')
dimnames(m1) <- list(rep('Lon', 3), rep('Lat',3))

以@josiber 为例,m1 将是

m1
#    Lat Lat Lat
#Lon   1   4   7
#Lon   2   5   8
#Lon   3   6   9

其他选项是使用来自base Rxtabs

xtabs(Var1~Lon+Lat, df)
#   Lat
#Lon 1 2 3
#  1 1 4 7
#  2 2 5 8
#  3 3 6 9

假设你需要所有的Var's

acast(melt(df, id.var=c('Lat', 'Lon')), Lon~Lat+variable)

【讨论】:

    【解决方案2】:

    如cmets所示,最好附上例子:

    dat <- data.frame(Lat=rep(1:3, each=3), Lon=rep(1:3, 3), Var1=1:9, Var2=11:19, Var3=21:29)
    dat
    #   Lat Lon Var1 Var2 Var3
    # 1   1   1    1   11   21
    # 2   1   2    2   12   22
    # 3   1   3    3   13   23
    # 4   2   1    4   14   24
    # 5   2   2    5   15   25
    # 6   2   3    6   16   26
    # 7   3   1    7   17   27
    # 8   3   2    8   18   28
    # 9   3   3    9   19   29
    

    听起来您正在尝试从长格式转换为宽格式;你可以使用reshape 函数来做到这一点:

    reshape(dat[,c("Lon", "Lat", "Var1")], timevar="Lon", idvar="Lat", direction="wide")
    #   Lat Var1.1 Var1.2 Var1.3
    # 1   1      1      2      3
    # 4   2      4      5      6
    # 7   3      7      8      9
    

    【讨论】:

    • 感谢之前的示例。如果我想变成一个带有 lat(垂直)lon(水平)和 var1(值)的矩阵
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 1970-01-01
    • 2017-04-07
    • 2018-07-17
    • 2013-01-14
    • 1970-01-01
    相关资源
    最近更新 更多