【问题标题】:Rstats mean of adjacent values in data.frameRstats data.frame 中相邻值的平均值
【发布时间】:2015-04-02 08:12:40
【问题描述】:

我需要一些帮助来解决以下问题:

我有一个47x42 data.frame,在上面的诊断部分有非空值,我需要基于这个创建一个新的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 的一种平滑值,由下一个值。我不知道我是否足够清楚,但如果需要,我可以详细说明。

感谢您的帮助。

【问题讨论】:

标签: r


【解决方案1】:

找到相邻值的平均值的最直接的解决方案是 for 循环

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

【讨论】:

  • 这个解决方案没有使用公式new_tab[i,j] &lt;- 1/2 * previous_tab[i,j] + 1/2 * mean(adjacent_cells_of(i,j))
  • 是的,这是正确的,根据 OP,1/2* 2842 +1/16*(10000+2842+1743+1743+1743+2842+10000+10000) #[1] 3978.062。可能是一个小问题
  • 感谢 akrun,@MamounBenghezal 的澄清
  • @MamounBenghezal 感谢您的编辑。 mean()-x[i,j] 仍然不够。所以我把它换成了sum。希望它能达到 throwic 的要求。
猜你喜欢
  • 2021-01-27
  • 2021-11-08
相关资源
最近更新 更多