更改格式并在管道中替换零

问题描述 投票:0回答:2

我写了一个管道,但是没用

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行中,我想更改几列的双精度精度(双精度类型),但也不起作用。最后一行-可以将所有NA替换为零,但也不起作用。对于某些零值,我具有双精度。 0.00或更多(例如0.0000),但我认为在这里并不重要。如何更改代码以使其正常工作?

r
2个回答
0
投票

可重现的示例将有助于更好地理解数据并测试可能的解决方案,但是暂时您可以尝试以下解决方案是否适合您。

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)

0
投票

某些步骤可以合并在一起,如果我们在具有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)
© www.soinside.com 2019 - 2024. All rights reserved.