【问题标题】:Subtracting the last value in a group from previous values in dplyr从 dplyr 中的先前值中减去组中的最后一个值
【发布时间】:2017-12-14 16:20:28
【问题描述】:

我有以下数据

data = tribble(~t,~key,~value,
        1,"a",10,
        2,"a",20,
        3,"a",30,
        1,"b",100,
        2,"b",200,
        3,"b",300,
        1,"c",1000,
        2,"c",2000,
        3,"c",3000)

并希望得到以下结果

result = tribble(~t,~key,~value,
        1,"a",-20,
        2,"a",-10,
        3,"a",0,
        1,"b",-200,
        2,"b",-100,
        3,"b",0,
        1,"c",-2000,
        2,"c",-3000,
        3,"c",0)

这个想法是我想从该组中的所有其他值中减去第三个值。我尝试group_bykey,但在组内的行明智减法上挣扎

【问题讨论】:

  • data %>% group_by(key) %>% mutate(value = value - last(value))怎么样
  • 成功了!谢谢

标签: r dplyr


【解决方案1】:

我们可以使用dplyr 中的last 函数。 arrange 功能是确保您的数据集的顺序正确。

library(dplyr)
data2 <- data %>%
  arrange(key, t) %>%
  group_by(key) %>%
  mutate(value = value - last(value)) %>%
  ungroup()
data2
# # A tibble: 9 x 3
#       t   key value
#   <dbl> <chr> <dbl>
# 1     1     a   -20
# 2     2     a   -10
# 3     3     a     0
# 4     1     b  -200
# 5     2     b  -100
# 6     3     b     0
# 7     1     c -2000
# 8     2     c -1000
# 9     3     c     0

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2013-12-21
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多