R语言中data.table多列格式化为两位小数的方法咨询
data.table多列保留两位小数的正确实现
先修正你代码里的核心问题
你之前的两段代码都存在语法错误:
- 第一段里的
round('xxxx, 2)是引号误用+参数错误,应该针对每列的变量x而非字符串; - 第二段的匿名函数写法错误,原生R里匿名函数需要用
function(x)定义,且括号配对混乱。
两种正确实现方式
根据需求分两种场景:
场景1:将列转为字符类型,强制显示两位小数(比如1→"1.00")
char_cols <- c("col1", "col2", "col3", "col4") test_dt[, (char_cols) := lapply(.SD, function(x) format(round(x, 2), nsmall = 2)), .SDcols = char_cols]
round(x, 2):将数值四舍五入到两位小数;format(..., nsmall = 2):确保结果固定显示两位小数,避免出现类似1的情况;.SDcols指定要处理的列,(char_cols)用于原地更新原表对应列。
场景2:保留数值类型,仅存储两位小数(打印时可能显示更少,但实际值是两位小数)
如果不需要转字符,只需要存储层面保留两位小数,直接用round即可:
test_dt[, (char_cols) := lapply(.SD, function(x) round(x, 2)), .SDcols = char_cols]
补充说明
data.table的:=操作符是原地修改,这和data.frame需要重新赋值的逻辑不同,只要语法正确,批量处理列的效率会比data.frame高很多。
内容的提问来源于stack exchange,提问作者Deepak Agarwal
相关产品推荐
相关产品推荐

