2015-04-02 58 views
2

我需要一些幫助解決以下問題:Rstats意味着相鄰值的data.frame

我有一個在上,診斷部分非空值的47x42 data.frame,我需要建立一個新的數據。在此基礎上一幀,其中值被定義爲:

new_tab[i,j] <- 1/2 * previous_tab[i,j] + 1/2 * mean(adjacent_cells_of(i,j)) 

例如較小data.frame可以是:

structure(list(X0 = c(10000L, 10000L, 10000L, 10000L, 10000L), 
X1 = c(2842L, 2842L, 2842L, 2842L, NA), X2 = c(1743L, 1743L, 
1743L, NA, NA), X3 = c(1144L, 1144L, NA, NA, NA), X4 = c(838L, 
NA, NA, NA, NA)), .Names = c("X0", "X1", "X2", "X3", "X4" 
), row.names = 15:19, class = "data.frame") 

     X0 X1 X2 X3 X4 
15 10000 2842 1743 1144 838 
16 10000 2842 1743 1144 838 
17 10000 2842 1743 NA NA 
18 10000 2842 NA NA NA 
19 10000 NA NA NA NA 

我的問題是如何可以定義「相鄰小區的平均」克對於[1,1]值,只有3個相鄰單元,對於[2,2]有8個值。

[2,2]新值應爲:

1/2* 2842 +1/16*(10000+2842+1743+1743+1743+2842+10000+10000) 

說得換句話說,它是一種由下一個值進行平滑我原來data.frame的值。我不知道我是否足夠清楚,但如果需要,我可以詳細說明。

感謝您的幫助。

+2

您可以檢查此鏈接http://stackoverflow.com/questions/29105175/find-neighbouring-elements-of -a-matrix-in-r它可能是有用的 – akrun 2015-04-02 08:36:08

+0

謝謝,它幫助了很多。我無法找到關於此主題的線索。 – throwic 2015-04-02 08:44:39

回答

4

尋找相鄰值的平均最直接的解決辦法是循環好醇」

m <- as.matrix(df) 
x <- rbind(NA, cbind(NA, m, NA), NA) 
z <- matrix(nrow=nrow(df), ncol=ncol(df)) 
for (i in 2:(nrow(x)-1)){ 
    for(j in 2:(ncol(x)-1)){ 
    y <- x[(i-1):(i+1), (j-1):(j+1)] 
    y[2,2] <- NA 
    z[i-1, j-1]= 1/2 * x[i, j] + 1/2 * mean(y, na.rm=TRUE) 
    } 
} 
z 
     [,1]  [,2]  [,3] [,4] [,5] 
[1,] 7614.0 4053.800 1843.000 1255.5 991 
[2,] 7852.6 3978.062 1892.929 1293.1 NA 
[3,] 7852.6 4218.857 2012.800  NA NA 
[4,] 8210.5 4879.500  NA  NA NaN 
[5,] 8210.5  NA  NA NaN NaN 
+2

此解決方案不使用公式'new_tab [i,j] < - 1/2 * previous_tab [i,j] + 1/2 * mean(adjacent_cells_of(i,j))' – 2015-04-02 08:40:34

+2

是的,到OP,'1/2 * 2842 + 1/16 *(10000 + 2842 + 1743 + 1743 + 1743 + 2842 + 10000 + 10000) #[1] 3978.062'。可能是一個小問題 – akrun 2015-04-02 08:41:51

+1

謝謝,akrun,@MamounBenghezal澄清 – ExperimenteR 2015-04-02 08:56:19