使用summarize函数计算mean(price)时如何避免自动向上取整?
解决dplyr summarize计算均值时显示取整的问题
别担心,你的计算结果并没有被自动向上取整!这只是tibble的默认打印格式在“搞小动作”——dplyr返回的tibble为了让输出更简洁,默认会限制显示的小数位数,而aggregate()返回的是普通数据框,会完整显示数值的所有小数部分。
验证结果本身是精确的
你可以先确认一下,summarize计算出的数值其实是精确的,只是显示被简化了:
# 保存结果 avg_result <- diamonds %>% group_by(cut) %>% summarize(AvgPrice = mean(price)) # 提取数值查看完整精度 pull(avg_result, AvgPrice)
运行这段代码你会看到,输出的是和aggregate()结果一致的精确数值,比如Fair对应的是4358.75776397516,只是tibble打印时帮你四舍五入了。
几种让结果显示完整精度的方法
方法1:打印时指定精度
在输出结果时,用print()函数手动设置显示的位数:
diamonds %>% group_by(cut) %>% summarize(AvgPrice = mean(price)) %>% print(digits = 7) # 设置显示7位有效数字,足够展示你的需求
这样就能得到和Results1完全一致的输出格式。
方法2:全局调整tibble的打印设置
如果你不想每次都手动指定,可以设置全局选项,让tibble默认显示更多有效数字:
# 设置全局有效数字位数为6(根据你的需求调整) options(pillar.sigfig = 6) # 之后再运行summarize代码,就会自动显示完整小数了 diamonds %>% group_by(cut) %>% summarize(AvgPrice = mean(price))
方法3:转换为普通数据框
把tibble转换成普通数据框,这样就会像aggregate()的结果一样,完整显示所有小数:
diamonds %>% group_by(cut) %>% summarize(AvgPrice = mean(price)) %>% as.data.frame()
内容的提问来源于stack exchange,提问作者JennyY
相关产品推荐
相关产品推荐

