R 4.3.0中write.table导出丢失午夜时间戳00:00:00的问题
问题解决:R 4.3.0中write.table导出POSIXct丢失午夜时间戳
问题原因
R 4.3.0对POSIXct类型的默认格式化规则做了调整:当时间为00:00:00时,会自动省略时间部分仅保留日期字符串,这就是你导出CSV时午夜记录丢失时分秒的原因,该问题已有不少用户反馈。
解决方案
以下几种方法均可满足你分号分隔、逗号小数、完整时间戳的需求:
1. 调整write.table的格式化参数
直接在write.table中指定date列的输出格式,强制所有时间戳完整显示:
write.table( your_data, file = "monthly_report.csv", sep = ";", dec = ",", row.names = FALSE, quote = TRUE, format = list(date = "%Y-%m-%d %H:%M:%S") )
2. 替换为data.table的fwrite(推荐)
data.table的fwrite对数据类型兼容性更好,直接支持指定分隔符和小数符号,且默认完整保留POSIXct时间戳:
library(data.table) # 转换为data.table(若原数据不是) setDT(your_data) fwrite( your_data, file = "monthly_report.csv", sep = ";", dec = ",", row.names = FALSE, quote = TRUE )
3. 替换为readr的write_delim
通过locale参数指定小数符号,同时确保时间戳完整输出:
library(readr) write_delim( your_data, file = "monthly_report.csv", delim = ";", locale = locale(decimal_mark = ","), quote = "all", col_names = TRUE )
4. 手动转换日期列为字符型
提前将POSIXct列转成固定格式的字符串,再用write.table导出:
# 强制date列统一格式 your_data$date <- format(your_data$date, "%Y-%m-%d %H:%M:%S") write.table( your_data, file = "monthly_report.csv", sep = ";", dec = ",", row.names = FALSE, quote = TRUE )
内容的提问来源于stack exchange,提问作者Bob
相关产品推荐
相关产品推荐

