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