gpt4 book ai didi

r - dplyr:结束年份和开始年份之间的值差异

转载 作者:行者123 更新时间:2023-12-05 00:56:12 25 4
gpt4 key购买 nike

使用此 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

我想获得结束年份和开始年份之间每个参数的值差异。

结果看起来像这样
siteID parameter difference
site1 A 3
site1 B 30
site1 C 6
site1 D 15

如果数据从长格式转换为宽格式,则可以通过从结束年份列 (2006) 中减去开始年份列 (2003) 来完成。

但是,我想使用 dplyr 来做到这一点。并且无需将数据转换为宽格式。

任何建议,将不胜感激。

最佳答案

我们按“siteID”、“参数”分组,并得到对应于最大“YEAR”和最小“YEAR”的“值”之间的差异。 which.maxwhich.min返回“YEAR”的最大值/最小值的行索引。

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

关于r - dplyr:结束年份和开始年份之间的值差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36736419/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com