我有一个名为“ yield”的数据集:

yield <- data.frame(fruits = c("apples", "apples", "apples", "oranges", "oranges",
         "oranges", "pears", "pears", "pears"), year = rep(2008:2010, 3),
         count = c(10, 13, 7, 5, 12, 14, 16, 18, 20))


r - 计算变化率-LMLPHP

我想确定哪种水果在2008年至2010年之间变化最大。我最近得到的是:

diff(yield$count)/yield[-nrow(yield),] * 100

但不仅会影响我的fruitsyear列,结果也不正确。

最佳答案

根据您的公式,我认为此dplyr解决方案有效。您需要按水果分组,然后按年份排序,以使lag正常工作:

library(dplyr)
yield %>%
  group_by(fruits) %>%
  arrange(fruits, year) %>%
  mutate(rate = 100 * (count - lag(count))/lag(count)) %>%
  ungroup()

# A tibble: 9 x 4
  fruits   year count   rate
  <fct>   <int> <dbl>  <dbl>
1 apples   2008 10.0    NA
2 apples   2009 13.0    30.0
3 apples   2010  7.00 - 46.2
4 oranges  2008  5.00   NA
5 oranges  2009 12.0   140
6 oranges  2010 14.0    16.7
7 pears    2008 16.0    NA
8 pears    2009 18.0    12.5
9 pears    2010 20.0    11.1

09-03 18:37