【发布时间】:2012-11-20 22:04:59
【问题描述】:
我有一个数据框,其中包含按国家/地区列出的 GDP 值以及随附的日期列。以下代码重现了两个国家(法国和德国)和六年(2005-2010)的示例数据集:
df <- structure(list(geo = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 2L,
2L, 2L, 2L, 2L, 2L), .Label = c("DE", "FR"), class = "factor"),
date = structure(c(12784, 13149, 13514, 13879, 14245, 14610,
12784, 13149, 13514, 13879, 14245, 14610), class = "Date"),
GDP = c(2147975, 2249584.4, 2373993.1, 2382892.6, 2224501.8,
2371033.2, 1557584.8, 1621633.2, 1715655.4, 1713157.1, 1636336.3,
1707966.5)), .Names = c("geo", "date", "GDP"), row.names = c(NA,
-12L), class = "data.frame")
现在我想计算一个额外的列,显示每年的百分比差异。我尝试以下方法:
library(quantmod)
# provides the Delt() function to calculate percent differences
df$dtGDP <- as.numeric(Delt(df$GDP))
这是错误的,因为它使用 2010 年的 DE 值计算 2005 年的 FR 值。有没有办法应用“按因子水平”函数?
【问题讨论】:
-
这是一个非常典型的“split-apply-combine”问题,您可能会在 SO 上找到大量答案。
-
@BenBarnes 我仍然喜欢下面的 DWin 答案!
-
实际上@BenBarnes 可能是正确的。如果您搜索
tapply和“ave”,您可能会发现很多与我的非常相似的示例。 (另一方面,你会发现很多 plyr-package 函数的工作示例,它们本质上是彼此同构的。)
标签: r