mutate_at не применяется ко всем выбранным столбцам - PullRequest
3 голосов
/ 09 февраля 2020

Я пытаюсь вычесть один столбец из всех остальных, но не все столбцы изменены.

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

Я получаю то же поведение, когда использую «список» вместо «приколы» (хотя мне не удалось выяснить, как использовать Dynami c имя переменной в «списке»)

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

Дайте мне знать, если я что-то здесь не так делаю.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2020

Я думаю, что лучший способ сделать это - сначала получить нужные значения, а затем применить вычитание.

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
0 голосов
/ 09 февраля 2020
col = 'd'
test %>%
    mutate(temp = !!as.name(col)) %>%
    mutate_all(funs(. - temp)) %>%
    select(-temp)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...