mutate_at不适用于所有选定的列

j

我试图从所有其他列中减去一列,但并非所有列都被修改。

test <- tibble(a = 1:3, b = 2:4, c = 3:5, d = 4:6, e = 5:7)

col = 'd'
test %>% mutate_at(vars(-a), funs(. - !!as.name(col)))

      a     b     c     d     e
  <int> <int> <int> <int> <int>
1     1    -2    -1     0     5
2     2    -2    -1     0     6
3     3    -2    -1     0     7

我不确定为什么该功能未应用于列e。函数似乎仅适用于我要减去的列

col = 'b'
test %>% mutate_at(vars(-a), funs(. - !!as.name(col)))

  a     b     c     d     e
  <int> <int> <int> <int> <int>
1     1     0     3     4     5
2     2     0     4     5     6
3     3     0     5     6     7

当我使用“列表”而不是“ funs”时,我得到相同的行为(尽管我还没有弄清楚如何在“列表”中使用动态变量名)

test %>% mutate_at(vars(-a), list(~. - b))
  a     b     c     d     e
  <int> <int> <int> <int> <int>
1     1     0     3     4     5
2     2     0     4     5     6
3     3     0     5     6     7

让我知道我在这里做错了什么。

AndS。

我认为最好的方法是先提取所需的值,然后再应用减法。

library(tidyverse)

col = 'd'
vals <- pull(test, {{col}})

test %>% mutate_at(vars(-a), list(~.-vals))
#> # A tibble: 3 x 5
#>       a     b     c     d     e
#>   <int> <int> <int> <int> <int>
#> 1     1    -2    -1     0     1
#> 2     2    -2    -1     0     1
#> 3     3    -2    -1     0     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章