在单列 R 中使用数字和字符值更改 Tibble 中的小数位

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

我需要将以下小标题中的小数位四舍五入为 3,但有些行有数字,有些行有字符“-”...

我通常会使用

Tibble 示例

Tibble = structure(list(Variable = c("Temperature", "Mercury", "Molybdenum"
), Test = c("ANOVA", "-", "ANOVA"), Transformation = c("None", 
"-", "None"), `OT(P)` = c("2.30066508038429e-08", 
"-", "1.073364034195e-05"), `RvOSP-v` = c("0.00278524117210566", 
"-", "1.88882927695255e-05"), `RvOSdiff` = c("0.333333333333332", 
"-", "3.66666666666667"), `RvESP-v` = c("4.98892422928776e-08", 
"-", "0.417855021742739"), `RvESdiff` = c("-2.23333333333333", 
"-", "-0.333333333333333")), row.names = c(NA, -3L), class = "data.frame")

我通常会使用

Tibble %>%  mutate(across(where(is.numeric), round, 3))

r dataframe dplyr
1个回答
0
投票

对我来说,您似乎已将这些列转换为

character
,以用破折号替换 NA 或零,现在您想要获得所需的精度。我会在更改列的类别之前进行舍入。

但是,如果您必须对此特定数据集进行舍入,则可以通过几个

ifelse
块并检查
as.numeric()
是否返回数字来实现。

library(dplyr)

Tibble %>% 
  mutate(across(everything(), 
                ~ifelse(!is.na(as.numeric(.x)),
                          ifelse(as.numeric(.x) < 0.001, 
                                  as.character(signif(as.numeric(.x), 
                                                      digits=2)),
                                  as.character(round(as.numeric(.x), 3))),
                          .x))) ## This will return some warnings

#>      Variable  Test Transformation   OT(P) RvOSP-v RvOSdiff RvESP-v RvESdiff
#> 1 Temperature ANOVA           None 2.3e-08   0.003    0.333   5e-08     -2.2
#> 2     Mercury     -              -       -       -        -       -        -
#> 3  Molybdenum ANOVA           None 1.1e-05 1.9e-05    3.667   0.418    -0.33

创建于 2024-11-07,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.