子集 POSIXct,丢失时区
Subsetting POSIXct, losing timezone
请看下面的R。我正在从一个更大的时间序列(var dt1
代表)中进行子集化,并且时区正在被删除。有什么建议么?
> dt1 <- as.POSIXct("2011-07-01 13:42:00", tz="America/New_York")
> dt1
[1] "2011-07-01 13:42:00 EDT"
> attr(dt1,"tzone")
[1] "America/New_York"
> df <- data.frame(subsetDate=.POSIXct(character(3)), otherData=numeric(3))
> df$subsetDate[1] <- dt1
df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> attr(df$subsetDate[1],"tzone")
NULL
除了删除 tz 之外,另一个问题是,虽然结果仍被识别为 str()
为 POSIXct,但我无法再对这些日期进行数学计算。
> str(df$subsetDate)
POSIXct[1:5], format: "2011-07-01 13:42:00" NA NA
> df$subsetDate[1]+3600
Error in unclass(e1) + unclass(e2) :
non-numeric argument to binary operator
你可以加回去:
attr(df[ ,'subsetDate'], "tzone") <- attr(dt1,"tzone")
打印为数据框时不显示,但现在显示了:
> df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> attr(df[ ,'subsetDate'], "tzone")
[1] "America/New_York"
您有几个问题:
- 使用
.POSIXct
而不是 as.POSIXct
是个坏主意;它是一项内部功能,不打算提供;除其他外,它实际上并没有像 as.POSIXct
那样将日期的内部表示形式转换为数字(这就是数学不起作用的原因)。
[<-
掉落属性
要解决 1,请使用:
df <- data.frame(subsetDate=as.POSIXct(NA_character_, format=""), otherData=numeric(3))
数学将适用于上述 table:
> df$subsetDate[1] <- dt1
> df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> df[1] + 3600
subsetDate
1 2011-07-01 14:42:00
3 <NA>
2 <NA>
对于第二点,属性复制规则并不总是非常直观,[<-
有删除属性的趋势。毕竟,并不总是很清楚您是想要来自 LHS 还是 RHS 的属性。对于您的具体问题,您可以按照@BondedDust 建议的方式设置属性
请看下面的R。我正在从一个更大的时间序列(var dt1
代表)中进行子集化,并且时区正在被删除。有什么建议么?
> dt1 <- as.POSIXct("2011-07-01 13:42:00", tz="America/New_York")
> dt1
[1] "2011-07-01 13:42:00 EDT"
> attr(dt1,"tzone")
[1] "America/New_York"
> df <- data.frame(subsetDate=.POSIXct(character(3)), otherData=numeric(3))
> df$subsetDate[1] <- dt1
df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> attr(df$subsetDate[1],"tzone")
NULL
除了删除 tz 之外,另一个问题是,虽然结果仍被识别为 str()
为 POSIXct,但我无法再对这些日期进行数学计算。
> str(df$subsetDate)
POSIXct[1:5], format: "2011-07-01 13:42:00" NA NA
> df$subsetDate[1]+3600
Error in unclass(e1) + unclass(e2) :
non-numeric argument to binary operator
你可以加回去:
attr(df[ ,'subsetDate'], "tzone") <- attr(dt1,"tzone")
打印为数据框时不显示,但现在显示了:
> df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> attr(df[ ,'subsetDate'], "tzone")
[1] "America/New_York"
您有几个问题:
- 使用
.POSIXct
而不是as.POSIXct
是个坏主意;它是一项内部功能,不打算提供;除其他外,它实际上并没有像as.POSIXct
那样将日期的内部表示形式转换为数字(这就是数学不起作用的原因)。 [<-
掉落属性
要解决 1,请使用:
df <- data.frame(subsetDate=as.POSIXct(NA_character_, format=""), otherData=numeric(3))
数学将适用于上述 table:
> df$subsetDate[1] <- dt1
> df
subsetDate otherData
1 2011-07-01 13:42:00 0
2 <NA> 0
3 <NA> 0
> df[1] + 3600
subsetDate
1 2011-07-01 14:42:00
3 <NA>
2 <NA>
对于第二点,属性复制规则并不总是非常直观,[<-
有删除属性的趋势。毕竟,并不总是很清楚您是想要来自 LHS 还是 RHS 的属性。对于您的具体问题,您可以按照@BondedDust 建议的方式设置属性