1

移動平均ではなく、データセット内の列のペアを平均したいと思います。列を2つのグループに分割し、各ペアの平均を求めます。

サンプルデータセット、目的の結果、および目的の結果を返すネストされたforループを示します。もっと良い方法があると思いました。別の投稿で解決策を見落としている場合は申し訳ありません。私はここで検索しましたが、私は通常試みるほど熱心にインターネットを検索しませんでした。アドバイスありがとうございます。

x = read.table(text = "
  site     yr1  yr2  yr3  yr4
    1       2    4    6    8
    2      10   20   30   40
    3       5   NA    2    3
    4     100  100   NA   NA", 
sep = "", header = TRUE)

x

desired.outcome = read.table(text = "
  site    ave12  ave34
    1       3      7
    2      15     35
    3       5    2.5
    4     100     NA", 
sep = "", header = TRUE)

result <- matrix(NA, ncol=((ncol(x)/2)+1), nrow=nrow(x))

for(i in 1: ((ncol(x)-1)/2)) {
  for(j in 1:nrow(x)) {

     result[j,   1 ] <- x[j,1]
     result[j,(i+1)] <- mean(c(x[j,(1 + ((i-1)*2 + 1))], x[j,(1 + ((i-1)*2 + 2))]), na.rm = TRUE) 

  }
}
4

1 に答える 1

4
output <- sapply(seq(2,ncol(x),2), function(i) {
  rowMeans(x[,c(i, i+1)], na.rm=T)
})

output次に、最初の列をマトリックスに追加できます。

output <- cbind(x[,1], output)

または、次を使用できますwithin

within(x, {
    pair.colmeans <- sapply(seq(2, ncol(x), 2), function(i) {
        rowMeans(x[, c(i, i+1)], na.rm=TRUE)
    })
})
于 2012-12-06T08:18:53.677 に答える