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

如何用dplyr的mutate_if对数值列保留一位小数并排除指定列?

解决方案

你可以通过自定义mutate_if的判断条件,同时筛选数值列并排除指定列,无需手动枚举所有列,同时保留非数值列。另外需要注意:你提到的「向下取整保留一位小数」和原代码里的round(四舍五入)逻辑不同,以下分两种情况给出实现:

1. 向下取整保留一位小数(符合你描述的需求)

mtcars %>% 
  mutate_if(~is.numeric(.) && !cur_column() %in% "drat", ~floor(. * 10) / 10)
  • 逻辑说明:
    • ~is.numeric(.) && !cur_column() %in% "drat":作为列筛选条件,只处理数值型且列名不是drat的列
    • floor(. * 10) / 10:先将数值放大10倍,用floor向下取整后再缩小10倍,实现保留一位小数的向下取整效果

2. 四舍五入保留一位小数(修正你原代码的列排除逻辑)

如果你实际需要的是四舍五入(和原代码逻辑一致),可以用:

mtcars %>% 
  mutate_if(~is.numeric(.) && !cur_column() %in% "drat", round, digits = 1)

扩展:排除多个列

如果需要排除多列,只需将"drat"换成列名向量即可,例如排除drat和wt列:

mtcars %>% 
  mutate_if(~is.numeric(.) && !cur_column() %in% c("drat", "wt"), ~floor(. * 10) / 10)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 23:43:36