data.frame の下部から data.frame の上部まで rollapply を実行しようとしています。基本的に、data.frame (RBH) の最後の行は、特定の被験者の 2012 年の最終測定値です。次に、前年の各年次測定値を差し引いて、前年の個人のサイズを計算する必要があります。
サンプル data.frame:
df1 <- structure(c(1.62, 3.96, 4.89, 6.61, 8.79,
57.15, 2.43, 5.58, 7.2, 9.3,
11.87, 66.6, 1.47, 3.49, 4.32,
NA, NA, 60.75),
.Dim = c(6L, 3L),
.Dimnames = list(c("2008", "2009", "2010","2011", "2012","RBH"),
c("Tree001", "Tree002", "Tree003")))
意図した出力:
Tree001 <- c(31.28, 32.90, 36.86, 41.75, 48.36, 57.15)
Tree002 <- c(29.62, 32.05, 37.63, 44.83, 54.13, 66.00)
Tree003 <- c(51.47, 52.94, 56.43, 60.75, NA, NA)
df2 <- data.frame(Tree001, Tree002, Tree003)
rownames(df2) <- 2007:2012
R の Rollapply()で見つけた提案から逆方向に rollapply を実行しようとしましたが、意図した出力が得られませんでした。これは data.frame ではなくリストとして出力され、実行中の値からではなく、現在のセルから各値を減算しました。
私が試したコード:
if ( !require(zoo) ) print(" Need pkg:zoo for rollapply")
df3 <- rollapply(df1[length(df1):1], width=2, diff, fill=NA, partial=T)
df3
[1] NA NA NA -0.83 -2.02 65.13 -54.73 -2.57 -2.10 -1.62
[11] -3.15 54.72 -48.36 -2.18 -1.72 -0.93 -2.34 NA
任意の提案をいただければ幸いです。