求小数部分首个小于5的数字位置,无则返回小数位数(R语言dplyr实现)
问题解决:定位小数部分首个小于5的数字位置
需求说明
- 目标:获取数值小数部分中第一个小于5的数字的位置;若所有小数位数字均≥5,则返回该数值的小数位数。
示例数据
先创建示例数据集:
library(dplyr) Data <- tibble(Number = c(0.998971282, 0.97871, 0.98121752874, 0.98921752874, 0.95171358, 0.99999999))
实现方案
手动硬编码结果只能处理固定数据,这里提供通用函数自动计算目标位置:
# 自定义计算函数 find_first_less_5 <- function(num) { num_str <- as.character(num) # 处理无小数部分的情况 if (!grepl("\\.", num_str)) { return(0) } # 提取小数部分 decimal_part <- strsplit(num_str, "\\.")[[1]][2] digits <- strsplit(decimal_part, "")[[1]] # 遍历查找首个小于5的数字位置 for (i in seq_along(digits)) { if (as.integer(digits[i]) < 5) { return(i) } } # 所有小数位都≥5时,返回小数位数 return(length(digits)) } # 计算并添加Position列 Data <- Data %>% mutate(Position = sapply(Number, find_first_less_5))
运行结果
执行后Data的Position列结果为c(6, 5, 3, 4, 3, 8),与预期完全一致。
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

