我在R做了一些工作, 假设我有以下列数据
Lat Lon Var1 Var2 Var3
具有大量模式,因为数据是矢量我想将该数据更改为网格矩阵。例如
Lon Lon Lon
Lat Var1 Var1 Var1
Lat Var1 Var1 Var1
Lat Var1 Var1 Var1
R中最有效的命令是什么,谢谢
答案 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)