我需要将以下小标题中的小数位四舍五入为 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))
对我来说,您似乎已将这些列转换为
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