我需要对矩阵进行子集化并将结果保留为矩阵,即我希望在2个不同的矩阵中将所有列的值在2到8之间进行子集,然后通过结果对第三个矩阵进行子集化。前两个矩阵是纬度和经度值。我这样试过:
Lond<-c(2,9)
Latd<-c(2,9)
Newlon <-which(Lon > Lond[1] & Lon < Lond[2])
Newlat <-which(Lat > Latd[1] & Lat < Latd[2])
我尝试过的另一个选择是
index <- which(lat >= 2 & lat <= 9 & lon >= 2 & lon <= 9)
这是所有单元格编号的子集,但我希望它保留为行和列的网格或矩阵,因为它返回一个线性数组。我需要它只保留具有这些值作为矩阵的行和列,这样我就可以将另一个具有实际值的矩阵“数据”子集,这样我就可以使用子集。
New<-Data[Newlon,Newlat]
该文件可在此处获得: Link
使用rhdf5取出hdf5文件的文件
lon<-h5read ("M1.he5","HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Longitude")
lat<-h5read ("M1.he5","HDFEOS/SWATHS/ColumnAmountNO2/Geolocation Fields/Latitude")
Data<-h5read ("M1.he5","HDFEOS/SWATHS/ColumnAmountNO2/Data Fields/ColumnAmountNO2Trop")
我该怎么做?
答案 0 :(得分:0)
以下是一些示例数据:
lon <- matrix(seq(-10,9.8,by=0.2),ncol=10,byrow=T)
lat <- matrix(seq(-10,9.8,by=0.2),ncol=10,byrow=T)
lon # which is the same as lat in this example:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] -10 -9.8 -9.6 -9.4 -9.2 -9 -8.8 -8.6 -8.4 -8.2
[2,] -8 -7.8 -7.6 -7.4 -7.2 -7 -6.8 -6.6 -6.4 -6.2
[3,] -6 -5.8 -5.6 -5.4 -5.2 -5 -4.8 -4.6 -4.4 -4.2
[4,] -4 -3.8 -3.6 -3.4 -3.2 -3 -2.8 -2.6 -2.4 -2.2
[5,] -2 -1.8 -1.6 -1.4 -1.2 -1 -0.8 -0.6 -0.4 -0.2
[6,] 0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8
[7,] 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8
[8,] 4 4.2 4.4 4.6 4.8 5 5.2 5.4 5.6 5.8
[9,] 6 6.2 6.4 6.6 6.8 7 7.2 7.4 7.6 7.8
[10,] 8 8.2 8.4 8.6 8.8 9 9.2 9.4 9.6 9.8
set.seed(1)
# I'm using print and digits=1 here for making the example easy to look at.
Data <- print(matrix(runif(100, 400, 500),ncol=10),digits=1); Data
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 427 421 493 448 482 448 491 434 443 424
[2,] 437 418 421 460 465 486 429 484 471 406
[3,] 457 469 465 449 478 444 446 435 440 464
[4,] 491 438 413 419 455 424 433 433 433 488
[5,] 420 477 427 483 453 407 465 448 476 478
[6,] 490 450 439 467 479 410 426 489 420 480
[7,] 494 472 401 479 402 432 448 486 471 446
[8,] 466 499 438 411 448 452 477 439 412 441
[9,] 463 438 487 472 473 466 408 478 425 481
[10,] 406 478 434 441 469 441 488 496 414 460
尚不完全清楚所需的输出应该是什么。如果我正确理解了这个问题,OP希望保留Data
的值,其中相应的lon
和lat
值介于2和8之间。输出的形式是我不清楚的关于。此答案保留矩阵并将所有不符合条件的值转换为NA
:
Data[!(lon > 2 & lon < 8)] <- NA
Data[!(lat > 2 & lat < 8)] <- NA
print(Data, digits=1)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] NA NA NA NA NA NA NA NA NA NA
[2,] NA NA NA NA NA NA NA NA NA NA
[3,] NA NA NA NA NA NA NA NA NA NA
[4,] NA NA NA NA NA NA NA NA NA NA
[5,] NA NA NA NA NA NA NA NA NA NA
[6,] NA NA NA NA NA NA NA NA NA NA
[7,] NA 472 401 479 402 432 448 486 471 446
[8,] 466 499 438 411 448 452 477 439 412 441
[9,] 463 438 487 472 473 466 408 478 425 481
[10,] NA NA NA NA NA NA NA NA NA NA
就个人而言,我可能会做更像这样的事情,但OP明确提到使用和返回矩阵:
# need to redefine Data from above.
set.seed(1);Data <- matrix(runif(100, 400, 500),ncol=10)
newdat <- cbind(lon = as.vector(lon),
lat = as.vector(lat),
Data = as.vector(Data))
newdat[lon>2 & lon<8 & lat>2 & lat<8,]