R 将我的变量视为 NA,即使它们已通过 strptime 或 as.POSIXct 成功转换
R treats my variable as NA even though they are converted successfully by strptime or as.POSIXct
d$Accessed.Time<-strptime(d$accessed_at,format="%Y-%m-%d %H:%M:%S")
d$Counselor.Added.Time<-strptime(d$counselor_added_at,format="%Y-%m-%d %H:%M:%S")
d$logtime<-as.numeric(d$Accessed.Time-d$Counselor.Added.Time,units="days")
View(d[which(is.na(d$logtime)),
c("accessed_at","Accessed.Time","counselor_added_at","Counselor.Added.Time","logtime")])
首先我将d$accessed_at
和d$counselor_added_at
转换为R日期时间变量并对其进行算术运算并存储在d$logtime
中。最奇怪的是R会把某些d$Counselor.Added.Time
当成NA
,即使它们转换成功
上面的屏幕截图是 R
中最后一个 View
语句的截图
is.na()
将 return TRUE
for Counselor.Added.Time
对于所有这些观察结果,然后即使它们看起来已成功转换,对它们进行算术运算也会失败。
有人知道这是怎么回事吗?
看来这个错误是特定于这些特定时间的
我试过这个:
a<-strptime("2015-03-08 02:33:07",format="%Y-%m-%d %H:%M:%S")
和
is.na(a)
returned TRUE
你可能会因为夏令时的变化而产生令人困惑的行为。
例如,在澳大利亚墨尔本,2012 年 10 月 7 日的 2:30 am 时间并不存在,因为时钟从凌晨 2 点向前移动了一个小时到凌晨 3 点。如果我们尝试使用那个时间,R 将 return NA。
ISOdatetime(2012,10,7,2,30,0, tz='Australia/Melbourne')
[1] NA
strptime 的行为很有趣,转换完成,值看起来不错,但实际上它丢失了。
x <- strptime('2012-10-7 2:30:0',format="%Y-%m-%d %H:%M:%S", tz='Australia/Melbourne')
x
#[1] "2012-10-07 02:30:00"
is.na(x)
#[1] TRUE
as.numeric(x)
# NA
让我们尝试一个确实存在的时间
x <- strptime('2012-10-7 3:30:0',format="%Y-%m-%d %H:%M:%S", tz='Australia/Melbourne')
x
#[1] "2012-10-07 03:30:00 AEDT"
is.na(x)
# [1] FALSE
如果您将时区指定为 UTC,这些问题就会消失
x <- strptime('2012-10-7 2:30:0',format="%Y-%m-%d %H:%M:%S", tz='UTC')
#[1] "2012-10-07 02:30:00 UTC"
另一个棘手的事情是,默认情况下,时区可以从您的计算机使用的任何时区获取。代码是否有效取决于您 运行 它是在夏季(夏令时)还是冬季。始终指定时区而不是依赖默认值是最安全的。
d$Accessed.Time<-strptime(d$accessed_at,format="%Y-%m-%d %H:%M:%S")
d$Counselor.Added.Time<-strptime(d$counselor_added_at,format="%Y-%m-%d %H:%M:%S")
d$logtime<-as.numeric(d$Accessed.Time-d$Counselor.Added.Time,units="days")
View(d[which(is.na(d$logtime)),
c("accessed_at","Accessed.Time","counselor_added_at","Counselor.Added.Time","logtime")])
首先我将d$accessed_at
和d$counselor_added_at
转换为R日期时间变量并对其进行算术运算并存储在d$logtime
中。最奇怪的是R会把某些d$Counselor.Added.Time
当成NA
,即使它们转换成功
上面的屏幕截图是 R
中最后一个View
语句的截图
is.na()
将 return TRUE
for Counselor.Added.Time
对于所有这些观察结果,然后即使它们看起来已成功转换,对它们进行算术运算也会失败。
有人知道这是怎么回事吗?
看来这个错误是特定于这些特定时间的
我试过这个:
a<-strptime("2015-03-08 02:33:07",format="%Y-%m-%d %H:%M:%S")
和
is.na(a)
returned TRUE
你可能会因为夏令时的变化而产生令人困惑的行为。
例如,在澳大利亚墨尔本,2012 年 10 月 7 日的 2:30 am 时间并不存在,因为时钟从凌晨 2 点向前移动了一个小时到凌晨 3 点。如果我们尝试使用那个时间,R 将 return NA。
ISOdatetime(2012,10,7,2,30,0, tz='Australia/Melbourne')
[1] NA
strptime 的行为很有趣,转换完成,值看起来不错,但实际上它丢失了。
x <- strptime('2012-10-7 2:30:0',format="%Y-%m-%d %H:%M:%S", tz='Australia/Melbourne')
x
#[1] "2012-10-07 02:30:00"
is.na(x)
#[1] TRUE
as.numeric(x)
# NA
让我们尝试一个确实存在的时间
x <- strptime('2012-10-7 3:30:0',format="%Y-%m-%d %H:%M:%S", tz='Australia/Melbourne')
x
#[1] "2012-10-07 03:30:00 AEDT"
is.na(x)
# [1] FALSE
如果您将时区指定为 UTC,这些问题就会消失
x <- strptime('2012-10-7 2:30:0',format="%Y-%m-%d %H:%M:%S", tz='UTC')
#[1] "2012-10-07 02:30:00 UTC"
另一个棘手的事情是,默认情况下,时区可以从您的计算机使用的任何时区获取。代码是否有效取决于您 运行 它是在夏季(夏令时)还是冬季。始终指定时区而不是依赖默认值是最安全的。