我有一个数据库,看起来像下一个例子:
| 站点|年|价值|
| - -----|- -----|- -----|
| site_1|二千年|十个|
| site_1| 2001年|十五|
| site_1|二OO四年|二十三|
| site_1|二零零六年|二十个|
| site_2| 2001年|九个|
| site_2| 2002年|九个|
| site_2|二零零七年|十五|
| site_2|二零零八年|十六|
| site_2| 2010年|十七岁|
我使用下一个函数来计算每个“站点”的“值”的变化率:
rate <- function(x, n=1) {
c(rep(NA, n), diff(x, n))
}
然后我在数据框中创建一个新列,以收集该函数的结果:
df$rate_change <- ave(df$value, factor(df$site), FUN= rate)
然而,我感兴趣的是计算每年的变化率(最终值-初始值/年),而前面的函数没有考虑值之间的年数。例如,“site_1”在2000年和2001年之间的变化率是增加5((15 - 10)/ 1年= 5),而在2001年和2004年之间必须是((23 - 15)/ 3年= 2.66)。
正如你所看到的,我正在使用一个函数,但我知道我可以用不同的方式来做,比如使用循环或dplyr包。
任何想法将非常赞赏。
1条答案
按热度按时间lx0bsm1f1#
使用
dplyr
的方法数据