注:在日常使用r语言保留数据的小数位数时,常会碰到小数位数强制取整的情况,如2.00会保存为2,本文介绍了我在遇到此问题时的处理方法
所用r包:tidyverse
#将所有数值型变量的小数位数统一
format_column <- function(column) {
if (is.numeric(column)) {
# 识别每列的原始小数位数
if(any(str_detect(as.character(column),"\\."),na.rm=T)){
max_decimal <- max(nchar(sub("^[^\\.]*", "", as.character(column), perl = TRUE)),na.rm=T)-1}#用正则表达式保留小数的部分,计算小数位数
else{
max_decimal <-0}
# 保留原始小数位数
result <- format(column, nsmall = max_decimal, trim = TRUE)
result[is.na(column)] <- NA
return(result)}
else{
return(column)
}
}
# 应用到整个数据框
final_data_formatted <- final_data %>%mutate(across(everything(), format_column))