2

Spatial*DataFrame(* = ポイント、ライン、ポリゴン、ピクセル、グリッドなど) のデータをどうにかして簡単に操作することは可能ですか? 特に、値を割り当てて操作するのが困難です。

require(gstat)
data(meuse)
coordinates(meuse) = ~x+y
data(meuse.grid)
gridded(meuse.grid) = ~x+y

######## 1) assigning value

meuse[1,'zinc'] <- NA
# Error in meuse[1, "zinc"] <- NA : object of type 'S4' is not subsettable
as.data.frame(meuse)[1,'zinc'] <- NA
# Error in as.data.frame(meuse)[1, "zinc"] <- NA : 
#   could not find function "as.data.frame<-"

######## 2) operating with values

meuse[, 'zinc'] + 2
# Error in meuse[, "zinc"] + 2 : non-numeric argument to binary operator

どちらの場合も、かなり醜い回避策を見つけました。

# ad 1)
meuse2 <- as.data.frame(meuse)
meuse2[1, 'zinc'] <- NA
meuse2 <- SpatialPointsDataFrame(SpatialPoints(meuse), meuse2)

# ad 2)
as.data.frame(meuse)[, 'zinc'] + 2

しかし、これらは単なる初心者の試みであり、あまりにも醜くて複雑です.Rでははるかに簡単に違いありません!

4

2 に答える 2

5

Spatial*DataFrame オブジェクトの場合、「@data」を使用して data.frame スロットにアクセスでき、通常の data.frame 操作が機能するはずです。あなたの例を使用して、

 meuse@data[1, 'zinc'] <- NA

与える

 str(meuse@data)
'data.frame':   155 obs. of  12 variables:
 $ cadmium: num  11.7 8.6 6.5 2.6 2.8 3 3.2 2.8 2.4 1.6 ...
 $ copper : num  85 81 68 81 48 61 31 29 37 24 ...
 $ lead   : num  299 277 199 116 117 137 132 150 133 80 ...
 $ zinc   : num  NA 1141 640 257 269 ...
 ...
于 2013-07-31T19:46:37.527 に答える