2017-07-12 42 views
1

我想對空間網格數據框進行簡單的操作。考慮我需要知道每個空間點(此處爲行)的每個列的總和。不幸的是,我無法使用sum或rowSums函數來做到這一點。你能幫我怎麼做嗎?我搜查了很多,但沒有看到任何類似的情況。Sum of spatialGridDataFrame:rowSums or colSums

我的數據彙總爲:

FLint 
Object of class SpatialGridDataFrame 
Object of class SpatialGrid 
Grid topology: 
    cellcentre.offset cellsize cells.dim 
x   582228.8 9.071439  568 
y   4505538.0 9.071439  445 
SpatialPoints: 
       x  y 
    [1,] 582228.8 4509566 
    [2,] 582237.9 4509566 
    .... 
    Data summary: 
Deterministic  sim001   sim002     
Min. :1  Min. :1  Min. :1    
1st Qu.:1  1st Qu.:1  1st Qu.:1    
Median :1  Median :1  Median :1    
Mean :1  Mean :1  Mean :1    
3rd Qu.:1  3rd Qu.:1  3rd Qu.:1    
Max. :1  Max. :1  Max. :1    
NA's :220354 NA's :220354 NA's :220354 

在這裏,我嘗試了很多,總結例如兩個最後一欄

y2 <- rowSums (FLint[,2:3], na.rm = TRUE, dims = 1) 
Error in base::rowSums(x, na.rm = na.rm, dims = dims, ...) : 
'x' must be an array of at least two dimensions 

回答

0

我稍微困惑,你是否希望rowSums()colSums(),但都將以相同的方式使用:

您需要撥打rowSums()通過S4對象的data插槽

這裏的玩具例子

library(sp) 

## data taken from ?SpatialGridDataFrame 
data(meuse.grid) # only the non-missing valued cells 
coordinates(meuse.grid) = c("x", "y") # promote to SpatialPointsDataFrame 
gridded(meuse.grid) <- TRUE # promote to SpatialPixelsDataFrame 
x = as(meuse.grid, "SpatialGridDataFrame") 

## the data is contained in '@data' 
rowSums([email protected][, c("part.a", "part.b")], na.rm = T) 

所以,在你的榜樣我認爲你要

rowSums([email protected][, 2:3]) 

你可以看到,如果你看一下結構中的數據是

str(x) 
Formal class 'SpatialGridDataFrame' [package "sp"] with 4 slots 
    [email protected] data  :'data.frame': 8112 obs. of 5 variables: 
    .. ..$ part.a: num [1:8112] NA NA NA NA NA NA NA NA NA NA ... 
    .. ..$ part.b: num [1:8112] NA NA NA NA NA NA NA NA NA NA ... 
    .. ..$ dist : num [1:8112] NA NA NA NA NA NA NA NA NA NA ... 
    .. ..$ soil : Factor w/ 3 levels "1","2","3": NA NA NA NA NA NA NA NA NA NA ... 
    .. ..$ ffreq : Factor w/ 3 levels "1","2","3": NA NA NA NA NA NA NA NA NA NA ... 
    [email protected] grid  :Formal class 'GridTopology' [package "sp"] with 3 slots 
    .. .. [email protected] cellcentre.offset: Named num [1:2] 178460 329620 
    .. .. .. ..- attr(*, "names")= chr [1:2] "x" "y" 
    .. .. [email protected] cellsize   : Named num [1:2] 40 40 
    .. .. .. ..- attr(*, "names")= chr [1:2] "x" "y" 
    .. .. [email protected] cells.dim  : Named int [1:2] 78 104 
    .. .. .. ..- attr(*, "names")= chr [1:2] "x" "y" 
    [email protected] bbox  : num [1:2, 1:2] 178440 329600 181560 333760 
    .. ..- attr(*, "dimnames")=List of 2 
    .. .. ..$ : chr [1:2] "x" "y" 
    .. .. ..$ : chr [1:2] "min" "max" 
    [email protected] proj4string:Formal class 'CRS' [package "sp"] with 1 slot 
    .. .. [email protected] projargs: chr NA 
+0

比k你兄弟。我錯過了幾個小時混淆的唯一的事情是'數據'。我是這種語言的新手,經過大量搜索後無法理解。 – Mohammad

+0

@Mhamhammad不客氣。值得了解R中'S3'和'S4'對象之間的區別。我會說99%的時間用於'S3',但是這些空間對象都是'S4'。 – SymbolixAU

+0

@Mhamhammad - 如果這回答你的問題,你可以通過按下投票箭頭下的「嘀嗒」來「接受」它。 – SymbolixAU