数据框Timestamp列重复疑问及POSIXct转换后显示异常求助
问题:转换POSIXct后Timestamp列显示重复是否属于预期现象?
我有一个格式如下的数据框:
timestamp value 1 2014-02-14 14:27:00 51.8460 2 2014-02-14 14:32:00 44.5080 3 2014-02-14 14:37:00 41.2440 4 2014-02-14 14:42:00 48.5680 5 2014-02-14 14:47:00 46.7140
我通过以下方式将timestamp转换为POSIX类型:
df$timestamp <- as.POSIXct(df$timestamp,format="%Y-%m-%d %H:%M:%S", tz="America/New_York")
转换后打印数据框时,显示为:
timestamp value 2014-02-14 14:27:00 "2014-02-14 14:27:00" "51....
请问Timestamp列出现重复是否属于预期现象?
解答
这种重复显示完全不属于预期现象,大概率是打印输出时的格式混淆,或者转换过程中出现了小问题。我们来拆解可能的原因和解决方法:
先确认列的实际类型:执行
class(df$timestamp),正常转换后的POSIXct列应该返回[1] "POSIXct" "POSIXt"。如果结果里混了"character",说明转换没有完全覆盖原列,或者原列的某些行无法被正确转换(不过你的时间格式和format参数完全匹配,这种情况概率很低)。用
str(df)查看数据框结构,这比直接打印更准确。正常情况下,timestamp列的输出应该是这样的:'data.frame': 5 obs. of 2 variables: $ timestamp: POSIXct, format: "2014-02-14 14:27:00" "2014-02-14 14:32:00" ... $ value : num 51.8 44.5 41.2 48.6 46.7如果这里显示timestamp列是混合类型(比如
chr/POSIXct),那就要检查转换代码是否正确执行——比如有没有在转换后不小心又修改了这个列?打印时的引号问题:默认的
print.data.frame函数会给字符型数据加引号,但POSIXct类型的数据正常不会被加引号。你看到的带引号的重复内容,说明当前列里同时存在POSIXct类型和字符型数据,导致打印时出现了混淆。
解决办法很简单:
- 重新执行转换代码,确保完全覆盖原列:
df$timestamp <- as.POSIXct(df$timestamp, format="%Y-%m-%d %H:%M:%S", tz="America/New_York") - 再次用
str(df)验证类型,如果还是有问题,可以先把原列转成字符型再转换:df$timestamp <- as.POSIXct(as.character(df$timestamp), format="%Y-%m-%d %H:%M:%S", tz="America/New_York") - 如果类型没问题但打印还是奇怪,可以试试用
print(df, quote=FALSE)取消引号显示,或者用View(df)在RStudio里查看数据框,会更清晰直观。
内容的提问来源于stack exchange,提问作者Fran Martinez
相关产品推荐
相关产品推荐

