【发布时间】:2014-07-30 16:34:55
【问题描述】:
我正在尝试从 data.frame 的底部到 data.frame 的顶部运行 rollapply。基本上,data.frame (RBH) 中的最后一行是 2012 年给定主题的最终测量值。然后我需要减去前几年的每个年度测量值,以计算个人每年的大小。
示例数据帧:
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
我尝试从 Rollapply() backwards in R 找到的建议向后运行 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
任何建议将不胜感激。
【问题讨论】:
-
我想你只是少了一个逗号。试试:
df3 <- rollapply(df1[length(df1):1 , ], ....) -
你少了一个逗号,但这仍然行不通。
diff在这里没有做你想做的事(与 rollapply 一起使用也没有意义) -
另一个暴露的错误是当
nrow合适时使用“长度”。输入是一个矩阵,矩阵的“长度”不是行数。(和如果是 data.frame,则“长度”也不是行数,而是列数。
标签: r difference rollapply