【问题标题】:dplyr: difference in values between end year and start yeardplyr:结束年份和开始年份之间的值差异
【发布时间】:2016-08-12 16:42:25
【问题描述】:

使用这个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 来完成,而不是将数据转换为宽格式。

任何建议将不胜感激。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们按“siteID”、“parameter”分组,并得到对应于最大“YEAR”和最小“YEAR”的“value”之间的差异。 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-08
      • 2017-07-15
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多