R语言:如何按小数点后百分位分组求和并导出CSV文件
R实现按Ratio百分位分组求和并导出CSV
需求说明
现有包含两列的DataFrame:
Ratio:数值型列,保留三位小数Intensity:对应Ratio的测量值
示例原始数据:
Ratio Intensity 1 0.000 1387.785 2 0.001 1325.254 3 0.003 1307.926 4 0.004 1286.817 5 0.006 1276.197 6 0.007 1251.381 7 0.008 1249.394 8 0.010 1251.923 9 0.011 1263.183 10 0.013 1265.272 11 0.014 1303.354 12 0.015 1336.920 13 0.017 1362.173 14 0.018 1395.946
需要实现:按Ratio的小数点后百分位(即保留两位小数后的数值)分组,对每组的Intensity求和,最终导出结果为CSV文件。
解决方案
方法1:使用dplyr包(简洁高效)
若未安装dplyr包,先执行install.packages("dplyr")完成安装。
# 1. 读取原始数据(替换为你的输入文件路径) df <- read.csv("your_input.csv") # 2. 分组求和处理 library(dplyr) result_df <- df %>% # 生成保留两位小数的分组键 mutate(grouped_ratio = round(Ratio, 2)) %>% # 按分组键聚合,求和Intensity group_by(grouped_ratio) %>% summarize(Intensity = sum(Intensity)) %>% # 将分组列名改回Ratio rename(Ratio = grouped_ratio) %>% # 取消分组状态(避免后续操作警告) ungroup() # 3. 导出结果到CSV(替换为你的输出文件路径) write.csv(result_df, "grouped_sum_result.csv", row.names = FALSE)
方法2:基础R实现(无需额外包)
如果不想加载第三方包,可使用基础R函数完成:
# 1. 读取原始数据 df <- read.csv("your_input.csv") # 2. 生成分组键并求和 df$grouped_ratio <- round(df$Ratio, 2) result_df <- aggregate(Intensity ~ grouped_ratio, data = df, FUN = sum) # 修改分组列名 colnames(result_df)[1] <- "Ratio" # 3. 导出CSV write.csv(result_df, "grouped_sum_result.csv", row.names = FALSE)
注意事项
- 若需要严格截断两位小数(而非四舍五入,比如将0.005保留为0.00),可将
round(Ratio, 2)替换为floor(Ratio * 100)/100或trunc(Ratio * 100)/100,根据实际需求选择。
内容的提问来源于stack exchange,提问作者Jessie
相关产品推荐
相关产品推荐

