2017-09-07 6 views
2

この問題の記述方法は不明です。私はそれが自明だと感じているが、私はそれを握ることができない。rasterToPoints抽出のx、y値を論理的に受け入れることができません

私はラスターオブジェクトのスタック(オブジェクトNDVI)を持っています。これらのことから、私は、私はいくつか使用できなくピクセル追い出さ前処理に伴いrasterToPoints

xycoord1 <- rasterToPoints(NDVI) 
xycoord <- xycoord1[,c(1:2)] 

を使用してxy座標を抽出してしまった:

> str(xycoord.short) 
num [1:20054, 1:2] 3802292 3802523 3802755 3802987 3803218 ... 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:2] "x" "y" 

私は単に特定のxを見つけたいんやありませんy座標。例:

> which(xycoord.short[,1]==3802292) 
integer(0) 

しかし、たとえば1つの列内の値を「取得」できないようです。

> xycoord.short[,1][1] 
[1] 3802292 
> xycoord.short[,1][1]==xycoord.short[,1][1] 
[1] TRUE 
> xycoord.short[,1][1]==3802292 
[1] FALSE 

誰でもこの問題にお手伝いできますか?私は問題を見つけることができません。それはrasterToPointsを通して最初の抽出と関係がありますか?ありがとう!

EDIT:私のxy座標の最初の10行

xy <- structure(c(3802291.63636448, 3802523.29272274, 3802754.94908101, 
       3802986.60543927, 3803218.26179754, 3803449.9181558, 3803681.57451406, 
       3803913.23087233, 3804144.88723059, 3804376.54358886, -49690.2888476191, 
       -49690.2888476191, -49690.2888476191, -49690.2888476191, -49690.2888476191, 
       -49690.2888476191, -49690.2888476191, -49690.2888476191, -49690.2888476191, 
       -49690.2888476191), .Dim = c(10L, 2L), .Dimnames = list(NULL, 
                     c("x", "y"))) 

EDIT2ため dput出力: 値が明らかに丸みを帯びているように、それは理にかなってdput出力を掲示した後。 正確な数字を使用すると...

> any(xycoord.short[,1]==3802291.63636448) 
[1] TRUE 
+0

Ah!問題があります。私の答えを編集させてください。 –

答えて

2

ここには丸めの問題があります。あなたの座標は "double"(10.3はdouble)と呼ばれるものですが、整数(例えば10)に基づいてサブセットを作成しようとしています。ここでできることは、それに基づいてnの場所とサブセットに囲まれています。

たとえば、8桁の数字を確認しましょう。だから、本質的には

format(xy, digits = 8) 

     x    y    
[1,] "3802291.636" " -49690.289" 
[2,] "3802523.293" " -49690.289" 
[3,] "3802754.949" " -49690.289" 
[4,] "3802986.605" " -49690.289" 
[5,] "3803218.262" " -49690.289" 
[6,] "3803449.918" " -49690.289" 
[7,] "3803681.575" " -49690.289" 
[8,] "3803913.231" " -49690.289" 
[9,] "3804144.887" " -49690.289" 
[10,] "3804376.544" " -49690.289" 

、あなたが3802292を探しているとき、それは実際に3802291.636...だから、それはそれを見つけることができません。

正確な座標をx桁まで正確に指定するか、または数字を丸めて処理することができます。または、希望の値を含む値の範囲を指定することもできます。

+0

私はどのインデックスを取得したいと思っていましたか?列が特定の値であるため、私は 'which()'を使ったのです。 。例えば、最初の値 '> head(xycoord.short [、1] == 3802292) [1] FALSE FALSE FALSE FALSE FALSE FALSE'の場合はTRUEになります。しかし、サブセッティングもうまくいかない(例: '> xycoord.short [xycoord.short [、1] == 3802292、 'は結果を出さない)、最初の値を '3802292'と認識しない。 – Katharina

+0

@Katharinaできるあなたのデータセットのほんの一部を共有していますか? 'dput'を使うことができます。編集ボタンを使って質問に追加してください。 –

+0

良いアイデアですよ、編集しました。丸みを帯びた.... – Katharina

関連する問題