根据另一个tibble,在tibble列中减去值

3

假设我有一个值的数据表:

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中的每个值中减去一定量,该量取决于它属于哪个组。我需要减去的金额在另一个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个回答

3
首先将 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接