Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 按元素将矩阵子集,并将值保留为矩阵_R_Matrix_Subset_Elements - Fatal编程技术网

R 按元素将矩阵子集,并将值保留为矩阵

R 按元素将矩阵子集,并将值保留为矩阵,r,matrix,subset,elements,R,Matrix,Subset,Elements,我需要将一个矩阵子集,并将结果保留为一个矩阵,也就是说,我想将两个不同矩阵中的值介于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]) Lond以下是一些示

我需要将一个矩阵子集,并将结果保留为一个矩阵,也就是说,我想将两个不同矩阵中的值介于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])

Lond以下是一些示例数据:

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明确提到使用和返回矩阵:

# 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,]
#需要从上面重新定义数据。

结实。种子(1);数据我不确定,但您可能只需要
的“arr.ind=T”参数,它是
?嗨,Alexis,我不明白您所说的“arr.ind=T”是什么意思。您能提供一个初始矩阵的小样本,以便其他人可以试用吗?我们没有
Lon
Lat
Lon
Lat
,因此我们无法真实地再现您正在做的事情。请参见
?查看帮助信息,包括
arr.ind
参数的解释。我认为这有点混淆您想要做什么。为了简单起见,一个显示预期输出的小示例将非常有用。使用一个小例子似乎比下载所有数据更清晰。为此,这里有一些关于
lon
lat
的示例数据,可以用来说明问题:
set.seed(1)
<好极了,弗兰克!成功了。第一个解决方案对我来说更有效,因为我能够把它画成一幅图像。嗨,弗兰克。如果我想将它们存储为矩阵列表而不是“打印”,该怎么办。请问R有什么功能?这是为了帮助我根据我的结果创建一个时间序列。@JokeO。嗯,这里有
列表
功能。您可能还会发现
lappy
和/或
sapply
非常有用。
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")
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
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
# 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,]