0

私は最近、正しい方向に向かうきっかけとなった質問をしましたが、未解決の問題がいくつか残っていました。

最後の行 (RBH) に最終的な成長測定値がリストされた data.frame があります。各サンプルは個別の列にあり、観測終了年 (2010、2011、または 2012) が異なります。基本的に、最終的な総成長測定値 (RBH 値) を測定値で昨年に適用し、現在の成長測定値から前年の年間成長測定値を差し引いて、サンプルが毎年どのくらいの大きさであったかを再現する必要があります。

前の質問で与えられた解決策により、累積合計を作成して各測定値から差し引くことができますが、NA または NaN 値を適切に処理しません。特定のサンプルに次の測定値がある場合、出力は次のようになります。

サンプル測定:

2009 - 1.2    
2010 - 1.8    
2011 - NaN    
2012 - NaN    
RBH - 60.5   

意図した出力:

2008 - 57.5    
2009 - 58.7    
2010 - 60.5    
2011 - NaN    
2012 - NaN  

別のユーザーから提案された、私が使用しているコードは次のとおりです。

cumsum.alt <- function(x){    
  res <- NaN*seq(x)    
  for(i in seq(x)){    
    if(sum(is.na(x[1])) == i){    
      res[i] <- NaN    
    } else {    
      res[i] <- sum(x[1:i], na.rm=TRUE)    
    }    
  }    
  res    
}    

df1[is.na(df1)] = 0 ##This is how you're actually treating it!    
df1 = data.frame(df1)    
df2 = apply(df1[nrow(df1):1,], 2, function(x) c(x[1], x[1]-cumsum.alt(x[-1])))    
df2 = df2[nrow(df2):1,] 

これは累積合計に対して機能しますが、NA 値は扱いません。どんな提案でも大歓迎です。

4

1 に答える 1

0

NaN/NA を置き換えることはまったく役に立ちますか? それらをゼロに置き換えてみてください:

x[!is.finite(x)] <- 0
cumsum(x)
于 2014-08-06T17:16:06.037 に答える