You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R中筛选以1开头的数值并处理小数部分求和

解决R语言数据处理需求的步骤

1. 构造原始数据集

先复现你提供的数据集:

df <- data.frame(
  col1 = c(148210.1, 854213.5, 232323.2),
  col2 = c(448521.3, 125896.5, 454586.3),
  col3 = c(955635.9, 487951.2, NA),
  col4 = c(585212.1, 121545.6, NA),
  col5 = c(558542.3, 125894.6, NA),
  col6 = c(125312.6, 154215.9, NA)
)

2. 生成目标单列数据框New_DF

提取所有非NA值,筛选以数字1开头的数值,再转为单列数据框:

# 将数据框转为一维向量并过滤NA值
all_values <- na.omit(as.vector(t(df)))
# 筛选以"1"开头的数值(转为字符串匹配正则)
filtered_values <- all_values[grepl("^1", as.character(all_values))]
# 转为单列数据框
New_DF <- data.frame(Col1 = filtered_values)

运行后New_DF的输出与预期一致:

Col1
1 148210.1
2 125312.6
3 125896.5
4 121545.6
5 125894.6
6 154215.9

3. 提取小数部分并求和(排除小数为9的数值)

提供两种可靠方法:

方法一:数值计算法(处理浮点数精度)

# 提取小数部分(取模1)
decimal_parts <- filtered_values %% 1
# 四舍五入到1位小数,避免浮点数精度误差(如154215.9的小数部分可能显示为0.8999999)
rounded_decimals <- round(decimal_parts, 1)
# 排除小数部分为0.9的数值,再将小数转为整数后求和
sum_result <- sum(rounded_decimals[rounded_decimals != 0.9] * 10)
sum_result # 输出结果:24

方法二:字符串分割法(直观无精度问题)

# 将数值转为字符串,按小数点分割
str_split <- strsplit(as.character(filtered_values), "\\.")
# 提取小数点后的部分并转为整数
decimal_nums <- sapply(str_split, function(x) as.integer(x[2]))
# 排除小数部分为9的数值,直接求和
sum_result <- sum(decimal_nums[decimal_nums != 9])
sum_result # 输出结果:24

内容的提问来源于stack exchange,提问作者FranciscoL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 21:22:28