我在R中编写一个函数,它读取前8行中带有一些头信息的文本文件,然后开始实际数据。以下是文件的外观:
Line 1 to
.....
Line 10 (header information)
0 0 4.169080e+000
1 0 6.391669e+000
2 0 6.391669e+000
.
.
.
511 0 9.922547e+000
0 1 5.268026e+000
1 1 5.268026e+000
.
.
.
511 511 9.922547e+000
我从作为标题一部分的行中提取了信息。第9行以后的行格式为:
x y value
我想逐个读取所有这些行(第11行以上)并形成值列的2D矩阵(尺寸:511 X 511),以便稍后我可以使用它生成图像。有人可以帮助我如何在矩阵中组织这个吗?我正在尝试使用yLoop和嵌套的xLoop,但它无法正常工作。
答案 0 :(得分:1)
你不能创建一个包含511行的矩阵吗?
v <- rnorm(511*511, 3, 1)
matrix(v, nrow = 511, ncol = 511)
更小的东西
v<- rnorm(4*4, 3,1)
> matrix(v, nrow = 4, ncol = 4)
[,1] [,2] [,3] [,4]
[1,] 1.944165 4.263226 2.700559 3.672780
[2,] 3.932594 1.742278 3.733877 3.115301
[3,] 5.224144 1.139828 2.979448 3.402496
[4,] 3.619015 4.248993 2.667306 2.168456
library(raster)
rv <- raster(matrix(v, nrow = 4, byrow = F)) # you'll want it with the default byrow = F
plot(rv)
如果你有类似的东西
x y v
0 0 4.169080e+000
1 0 6.391669e+000
2 0 6.391669e+000
511 0 9.922547e+000
0 1 5.268026e+000
1 1 5.268026e+000
511 511 9.922547e+000
并从剪贴板中读取它
v <- read.table(text=readClipboard(), header=T)
你会得到类似的东西
> d
x y v
1 0 0 4.169080
2 1 0 6.391669
3 2 0 6.391669
4 511 0 9.922547
5 0 1 5.268026
6 1 1 5.268026
7 511 511 9.922547
和d $ v将是您要绘制的数据。
您可以处理光栅分辨率和坐标参考系统。
您可能有一个参考图层 x 来读取分辨率和crs我想。如果是这样,请使用类似
的内容v <- matrix(d$v, nrow = 4, byrow = F)
rv <- raster(v, xmn=x@extent@xmin, ymn=x@extent@ymin,
xmx=x@extent@xmax, ymx=x@extent@ymax,
crs = CRS(proj4string(x)))
使用您的数据:
myfolder <- 'D:/temp'
d <- read.table(file.path(myfolder, 'sample.txt'), header = F, skip = 9, sep = '')
> head(d)
V1 V2 V3
1 0 0 12
2 1 0 7
3 2 0 10
4 3 0 11
5 4 0 8
6 5 0 9
rv <- raster(nrows=100, ncols=100)
rv[] <- matrix(d$V3, nrow = 100, byrow = F)
plot(rv)
考虑到图像为1 x 1mm,您可以尝试
rv1 <- raster(matrix(d$V3, nrow = 100, byrow = T), # I'm changing how d$V3 is arranged
xmn=0, ymn=0,
xmx=1, ymx=1)
spplot(rv1, scales = list(draw = TRUE))