dplyr:年末和年初之间的值差异

dplyr:年末和年初之间的值差异,r,dplyr,R,Dplyr,使用此data.frame siteID <- c(rep("site1", 16), rep("site2", 16), rep("site3", 16),rep("site4", 16)) YEAR <- rep(c("2003", "2004", "2005", "2006"), 16) parameter <- c(rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4), rep("A",

使用此
data.frame

siteID <- c(rep("site1", 16), rep("site2", 16), rep("site3", 16),rep("site4", 16))
YEAR <-   rep(c("2003", "2004", "2005", "2006"), 16)
parameter <- c(rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4),
               rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4),
               rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4),
               rep("A", 4), rep("B", 4), rep("C", 4), rep("D", 4))
value <- c(seq(1, 4, by=1), seq(10, 40, by=10), seq(12, 18, by=2), seq(5, 20, by=5),
           seq(3, 12, by=3), sample(13:18, 4), sample(15:22, 4), sample(10:18, 4),
           seq(7, 1, by=-2), sample(15:22, 4), sample(15:19, 4), sample(10:20, 4),
           seq(8, 5, by=-1), seq(50, 20, by=-10), seq(16, 10, by=-2), seq(20, 5, by=-5))
df <- data.frame(siteID, parameter, YEAR, value)

head(df, 20)
> head(df, 20)
   siteID parameter YEAR value
1   site1         A 2003     1
2   site1         A 2004     2
3   site1         A 2005     3
4   site1         A 2006     4
5   site1         B 2003    10
6   site1         B 2004    20
7   site1         B 2005    30
8   site1         B 2006    40
9   site1         C 2003    12
10  site1         C 2004    14
11  site1         C 2005    16
12  site1         C 2006    18
13  site1         D 2003     5
14  site1         D 2004    10
15  site1         D 2005    15
16  site1         D 2006    20
17  site2         A 2003     3
18  site2         A 2004     6
19  site2         A 2005     9
20  site2         A 2006    12
如果数据从长格式转换为宽格式,则可以通过从年末列(2006)中减去起始年列(2003)来实现

但是,我想使用
dplyr
来完成,而不需要将数据转换为宽格式


如果您有任何建议,我们将不胜感激。

我们按“站点ID”、“参数”分组,并获取对应于最大“年”和最小“年”的“值”之间的差值。
which.max
which.min
返回“年”最大/最小值的行索引

res <- df %>%
         group_by(siteID, parameter) %>%
         summarise(difference = value[which.max(YEAR)]-value[which.min(YEAR)])
head(res, 4)
#  siteID parameter difference
#  (fctr)    (fctr)      (dbl)
#1  site1         A          3
#2  site1         B         30
#3  site1         C          6
#4  site1         D         15
res%
分组依据(站点ID,参数)%>%
汇总(差异=值[哪个.max(年)]-值[哪个.min(年)])
总目(res,4)
#siteID参数差异
#(fctr)(fctr)(dbl)
#1地点1 A 3
#2地点1 B 30
#3站点1 C 6
#4地点1 D 15
res <- df %>%
         group_by(siteID, parameter) %>%
         summarise(difference = value[which.max(YEAR)]-value[which.min(YEAR)])
head(res, 4)
#  siteID parameter difference
#  (fctr)    (fctr)      (dbl)
#1  site1         A          3
#2  site1         B         30
#3  site1         C          6
#4  site1         D         15