【问题标题】:How do I read data from txt file to create a 2D matrix?如何从 txt 文件中读取数据以创建二维矩阵?
【发布时间】:2014-03-11 16:52:55
【问题描述】:

我正在 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 行开始)并形成值列的二维矩阵(尺寸:511 X 511),以便稍后我可以使用它生成图像。有人可以帮我如何在矩阵中组织它吗?我正在尝试使用 yLoop 和嵌套的 xLoop,但它不起作用。

【问题讨论】:

  • 是的。这是代码 FILE_HANDLE=file(FILE_PATH,open="r") open(FILE_HANDLE)spectralData = read.table(FILE_HANDLE,skip=1:8) close(FILE_HANDLE)

标签: r function matrix


【解决方案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))

【讨论】:

  • 那么我应该如何在这个矩阵中输入第三列的值呢?
  • @novicegeek 你能给我们提供一些数据来重现它吗?
  • 谢谢。我能够生成矩阵然后绘制它。但我不确定生成的图中提供的比例是多少(0到6)。而且,我希望显示一种特定的情节模式,但它似乎不是那个。
  • @novicegeek 比例和投影问题现在可以通过正确获取的数据来处理。只有使用您的数据副本,我们才能检查问题...
  • 我应该如何共享我的数据文件?抱歉,找不到任何上传选项
猜你喜欢
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
相关资源
最近更新 更多