改变Lat& R中的Lon向量到矩阵

时间:2014-12-05 01:11:07

标签: r matrix vector

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

Lat Lon Var1 Var2 Var3

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

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

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

2 个答案:

答案 0 :(得分:1)

如评论中所示,最好以一个例子发布:

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

答案 1 :(得分:1)

您还可以使用acast

中的reshape2
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

其他选项是使用xtabs

中的base R
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)