首页 文章

基于另一个tibble从tibble列中减去值

提问于
浏览
1

说我有一些 Value 观:

raw = tibble(
    group = c("A", "B", "C", "A", "B", "C"),
    value = c(10, 20, 30, 40, 50, 60)
)

# A tibble: 6 x 2
  group value
  <chr> <dbl>
1     A    10
2     B    20
3     C    30
4     A    40
5     B    50
6     C    60

我想从我的tibble中的每个值中减去一定数量,具体取决于它属于哪个组 . 我需要减去的金额是另一个元素:

corrections = tibble(
    group = c("A", "B", "C"),
    corr = c(0, 1, 2)
)

# A tibble: 3 x 2
  group  corr
  <chr> <dbl>
1     A     0
2     B     1
3     C     2

实现这一目标的最优雅方式是什么?以下作品,但我觉得它很乱 - 当然还有另一种方式?

mutate(raw, corrected = value - as_vector(corrections[corrections["group"] == group, "corr"]))

# A tibble: 6 x 3
  group value corrected
  <chr> <dbl>     <dbl>
1     A    10        10
2     B    20        19
3     C    30        28
4     A    40        40
5     B    50        49
6     C    60        58

1 回答

  • 1

    首先加入 rawcorrections ,然后计算 corrected 怎么样?

    library(dplyr)
    left_join(raw, corrections, by = "group") %>% 
      mutate(corrected = value - corr) %>% 
      select(-corr) 
    
    #> # A tibble: 6 x 3
    #>   group value corrected
    #>   <chr> <dbl>     <dbl>
    #> 1     A    10        10
    #> 2     B    20        19
    #> 3     C    30        28
    #> 4     A    40        40
    #> 5     B    50        49
    #> 6     C    60        58
    

相关问题