Изменить формат и заменить нули в трубе - PullRequest
0 голосов
/ 15 января 2020

Я написал канал, но он не работает

newdata_tibble %>%
  mutate("Order_TMS_1" = as.character(Order_TMS_1),
         "Cbm" = as.double(Cbm)) %>%
  gsub(",",".",Cbm) %>%
  format(round(.$Cbm:.$CHGW,digits,2),2) %>%
  na_if(.$REv_TMS_1:.$GP,0)

2 и 3 строки моего кода работают. От четвертого ряда (gsub) до конца мой код не работает должным образом.

В 4 строке я хочу заменить запятые на точки, но это не удается. В 5-й строке я хочу изменить двойную точность для нескольких столбцов (типа double), но также не работает. Последняя строка - не нужна для замены всех NA на нули, но также не работает. У меня есть двойная точность для некоторых нулевых значений, например. 0,00 или больше, как 0,0000, но я думаю, что это не имеет значения здесь. Как я могу изменить свой код, чтобы он работал?

Ответы [ 2 ]

1 голос
/ 15 января 2020

Некоторые шаги можно объединить вместе, даже если мы сделаем as.double/as.numeric для столбца с ,, он станет NA. Итак, нам нужно сначала заменить его, а затем преобразовать в double

library(dplyr)
library(stringr)
newdata_tibble %>%
    type.convert(as.is = TRUE) %>%
    mutate(Cbm = as.numeric(str_replace(Cbm, ",", "."))) %>%
    mutate_at(vars(Cbm:CHGW),  ~format(round(., 2), 2)) %>%
    mutate_at(vars(REv_TMS_1:GP), na_if, 0)
0 голосов
/ 15 января 2020

Воспроизводимый пример помог бы лучше понять данные и протестировать возможные решения, но на данный момент вы можете попробовать, если вам подходит следующее решение.

library(dplyr)

newdata_tibble %>%
   mutate(Order_TMS_1 = as.character(Order_TMS_1),
          Cbm = as.double(Cbm),
          Cbm = gsub(",",".",Cbm)) %>%
   mutate_at(vars(Cbm:CHGW), ~format(round(., 2), 2)) %>%
   mutate_at(vars(REv_TMS_1:GP), na_if, 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...