2017-03-19 8 views
1

これは本当に簡単な質問ですが、私はすぐに困惑しています。SpatialPointsDataFrameの0を特定の列のNAに変更します。

RのSpatialPointsDataFrameの0または0.00をNAに変更するにはどうすればよいですか? 私はこれを特定の列に対してのみ行いたいと思います。

たとえば、l8.stationsというデータセットがあり、これを行うのは l8.stations [11:18]の場合のみです。どうしますか?

答えて

1

これは、標準のdata.frameで行うよりややこしいことです。これを行う1つの方法は、標準のdata.frameに変更したいデータ列を抽出することです。次に、data.frameのサブセットと代入を使用して、通常の方法でそれらを変更します。hereを参照してください。

したがって、たとえば、列5にNAに整数ゼロを変える:我々はこれを行うことができます8:

df = as.data.frame(l8.stations)[, 5:8]  # extract desired columns into a data.frame 
df[df == 0] = NA        # change values that are zero into NA 
l8.stations[1:NROW(l8.stations), 5:8] = df # insert result back into spatial points data frame 

は今、あなたはまた、0.0の値に対して同じことをやって言及しました。この場合、整数ではなく実数を扱う場合、ゼロと等しいかどうかを実際にテストする必要がありますが、その値はいくつかの小さなしきい値よりも小さいことを確認してください。なぜ我々が実数でこれを行うのかを理解するには、単純にそれらがゼロに等しいことをテストするのではなく、thisを読んでください。そのため、例えば、我々は上記と同じですが、以下eps以上の値をテストを行うことができますeps = 1e-10としてカットオフを使用します

df = as.data.frame(l8.stations)[, 5:8] 
df[abs(df) < eps] = NA  
l8.stations[1:NROW(l8.stations), 5:8] = df 

にテストするためのいくつかの再現性のダミーデータを:

library(sp) 

set.seed(1331) 
pts = cbind(1:5, 1:5) 
dimnames(pts)[[1]] = letters[1:5] 

df = data.frame(sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T), 
       sample(0:3, 5, T)) 

row.names(df) = letters[1:5] 
colnames(df) = LETTERS[1:8] 
l8.stations = SpatialPointsDataFrame(pts, df) 
関連する問題