相关疑难解决方法(0)

R问题与舍入毫秒

考虑到以下问题,在R.下舍入毫秒数.如何绕过它以便时间正确?

> options(digits.secs=3)
> as.POSIXlt("13:29:56.061", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.060 UTC"
> as.POSIXlt("13:29:56.062", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.061 UTC"
> as.POSIXlt("13:29:56.063", format='%H:%M:%OS', tz='UTC')
[1] "2012-06-07 13:29:56.063 UTC"
Run Code Online (Sandbox Code Playgroud)

我注意到这个URL提供了背景信息,但没有解决我的问题: 在R中调用strptime时毫秒难题.

此URL也触及该问题但未解决此问题:R xts:索引中的.001毫秒.

在这些情况下,我确实看到以下内容:

> x <- as.POSIXlt("13:29:56.061", format='%H:%M:%OS', tz='UTC')
> print(as.numeric(x), digits=20)
[1] 1339075796.0610001087
Run Code Online (Sandbox Code Playgroud)

URL似乎也表明这只是一个显示问题,但我注意到使用"%OS3"没有选项行的语句似乎没有拾取正确的位数.

我在Windows下使用的版本是32位2.15.0,但这似乎存在于R的其他情况下.

请注意,我的原始数据是CSV文件中的这些日期时间字符串我必须找到一种方法,将它们从字符串转换为正确的毫秒时间.

time r rounding-error rounding milliseconds

7
推荐指数
1
解决办法
3782
查看次数

在R中调用strptime时毫秒难题

options(digits.secs = 3);

> strptime("2007-03-30 15:00:00.007", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.007"
> strptime("2007-03-30 15:00:00.008", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.008"
> strptime("2007-03-30 15:00:00.009", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.008"
> strptime("2007-03-30 15:00:00.010", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.01"
> strptime("2007-03-30 15:00:00.011", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.010"
> strptime("2007-03-30 15:00:00.999", format = "%Y-%m-%d %H:%M:%OS");
[1] "2007-03-30 15:00:00.998"
Run Code Online (Sandbox Code Playgroud)

我很困惑,为什么与"009"有一毫秒的差异,然后再从"011"那里得到.

r strptime

6
推荐指数
1
解决办法
5525
查看次数

准确地从字符 - > POSIXct->字符转换为亚毫秒日期时间

我在文件中有一个字符日期时间列.我加载文件(进入a data.table)并执行需要将列转换为的内容POSIXct.然后我需要将POSIXct值写回文件,但日期时间将不相同(因为它打印不正确).

这种打印/格式化问题是众所周知的,并且已经多次讨论过.我读过一些描述这个问题的帖子.我发现的最权威的答案是针对这个问题给出的.该问题的答案提供了两个应该解决此问题的函数(myformat.POSIXctform),但它们似乎不适用于此示例:

x <- "04-Jan-2013 17:22:08.139"
options("digits.secs"=6)
form(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),format="%d-%b-%Y %H:%M:%OS3")
[1] "04-Jan-2013 17:22:08.138"
form(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),format="%d-%b-%Y %H:%M:%OS4")
[1] "04-Jan-2013 17:22:08.1390"
myformat.POSIXct(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),digits=3)
[1] "2013-01-04 17:22:08.138"
myformat.POSIXct(as.POSIXct(x,format="%d-%b-%Y %H:%M:%OS"),digits=4)
[1] "2013-01-04 17:22:08.1390"
Run Code Online (Sandbox Code Playgroud)

我的sessionInfo:

R version 2.15.2 (2012-10-26)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United Kingdom.1252  LC_CTYPE=English_United Kingdom.1252
[3] LC_MONETARY=English_United Kingdom.1252 LC_NUMERIC=C                        
[5] LC_TIME=C                              

attached base packages:
[1] stats     graphics  grDevices datasets  utils     methods   base     

other attached packages:
[1] fasttime_1.0-0   data.table_1.8.9 …
Run Code Online (Sandbox Code Playgroud)

r posixct

6
推荐指数
2
解决办法
9050
查看次数

R中的日期时间转换,小数秒

如何转换字符串

t <- c("00:00:0.00", "00:00:0.34")
Run Code Online (Sandbox Code Playgroud)

变成一个数字?尝试了几种方法 - 但没有一种方法有效..

time r date

6
推荐指数
1
解决办法
2994
查看次数

在R中为时间戳添加毫秒

我的时间戳管理存在问题.在我的数据集中,我有两个变量,即时间和相对时间.时间是HH:MM:SS.ss格式,而相对时间是数字变量,包含从0开始经过的秒数(即0.76,1.28,1.78,2.38 ......).为简单起见,让我们考虑一下假设情况:

Time <- c("09:33:23.00", "09:35:25.00", "09:36:26.00")
RTime <- c(0.78, 1.28, 3.98)

然后我执行以下操作来添加毫秒时间:

ATime <- strftime(strptime(Time,format="%H:%M:%OS")+(RTime %% 1),format="%H:%M:%OS2")

我希望它能产生:
"09:33:23.78" "09:35:25.28" "09:36:26.98"

但我得到以下结果:
"09:33:23.77" "09:35:25.27" "09:36:26.98"

大部分时间它只有一毫秒.我不明白为什么这样做.我可以在strptime函数中添加0.01 ,即(RTime %% 1) + 0.01.但是我没有发现那么优雅,更重要的是,正如你在上面的例子中看到的那样,它并不总是0.01关 - 就像最后一例一样.有关正在发生的事情的任何提示,或者可能是改进代码的建议?

干杯

[求助]
编辑:感兴趣.这就是我最终解决问题的方法:

ATime <- strftime(strptime(Time,format="%H:%M:%OS")+(RTime %% 1)+0.005,format="%H:%M:%OS2")

这会"强制"舍入而不是截断,这导致了毫秒的差异.
感谢@Josh O'Brien和@nrussell的评论!

datetime r

5
推荐指数
1
解决办法
1151
查看次数

在 R 中,%OSn 时间格式是否仅对格式化有效,但对解析无效?

考虑这个 R 代码,它使用定义的时间格式字符串(下面的 timeFormat 变量)来格式化和解析日期:


time = as.POSIXct(1433867059, origin = "1970-01-01")
print(time)
print( as.numeric(time) )

timeFormat = "%Y-%m-%d %H:%M:%OS3"
tz = "EST"

timestamp = format(time, format = timeFormat, tz = tz)
print(timestamp)

timeParsed = as.POSIXct(timestamp, format = timeFormat, tz = tz)
print(timeParsed)
print( as.numeric(timeParsed) )
Run Code Online (Sandbox Code Playgroud)

如果我将其粘贴到运行最新 (3.2.0) 稳定版本的 Windows 机器上的 Rgui 中,我会得到以下信息:


> time = as.POSIXct(1433867059, origin = "1970-01-01")
> print(time)
[1] "2015-06-09 12:24:19 EDT"
> print( as.numeric(time) )
[1] 1433867059
> 
> timeFormat = "%Y-%m-%d %H:%M:%OS3"
> tz = …
Run Code Online (Sandbox Code Playgroud)

format parsing r posixct

5
推荐指数
1
解决办法
996
查看次数

R as.POSIXct()下降小时分和秒

我正在试验R来分析一些测量数据.我有一个.csv文件,包含超过200万行测量.这是一个例子:

2014-10-22 21:07:03+00:00,7432442.0
2014-10-22 21:07:21+00:00,7432443.0
2014-10-22 21:07:39+00:00,7432444.0
2014-10-22 21:07:57+00:00,7432445.0
2014-10-22 21:08:15+00:00,7432446.0
2014-10-22 21:08:33+00:00,7432447.0
2014-10-22 21:08:52+00:00,7432448.0
2014-10-22 21:09:10+00:00,7432449.0
2014-10-22 21:09:28+00:00,7432450.0
Run Code Online (Sandbox Code Playgroud)

在读入文件后,我想将时间转换为正确的时间,使用as.POSIXct().对于小文件,这可以正常工作,但对于大文件则不行.

我通过读取一个大文件,创建一个小部分的副本然后释放as.POSIXct()正确的列来做一个例子.我包含了该文件的图像.正如您所看到的,当将它应用于temp-variable时,它会纠正小时,分钟和秒.但是,将其应用于整个文件时,仅存储日期.(也需要很多时间(超过2分钟))

POSIXct()错误

什么可能导致这种异常?这是由于某些系统限制,因为我在我的笔记本电脑上运行它.

编辑

在我的Windows 7设备上运行R 3.1.3会导致此错误.但是,在运行R 3.0.2的Ubuntu 14.01上,保留了大文件的时间.刚刚注意到有一个适用于Windows的更新版本(3.2.0),将更新并检查问题是否仍然存在.

r posixct

4
推荐指数
3
解决办法
3754
查看次数

如何在r中使用as.POSIXct或as.POSIXlt获得毫秒数?

我想得到亚秒,所以我使用以下内容:

> options(digits.secs=6)
> as.POSIXlt(df1$Global.Time[5]/1000, origin="1970-01-01",  tz="America/Los_Angeles")
[1] "2005-06-15 07:53:42.7 PDT"
Run Code Online (Sandbox Code Playgroud)

为什么输出不包含"07:53:42.700000"之类的内容?

同样的问题POSIXct:

> as.POSIXct(df1$Global.Time[3]/1000, origin="1970-01-01",  tz="America/Los_Angeles")
[1] "2005-06-15 07:53:42.5 PDT"
Run Code Online (Sandbox Code Playgroud)

r

3
推荐指数
1
解决办法
588
查看次数

通过 T-SQL 将 SQL Server 日期时间格式化为 %Y-%m-%d %H:%M:%OS4 %z 格式?

供应商要求我将 SQL ServerDateTime值转换为以下特定时间戳格式%Y-%m-%d %H:%M:%OS4 %z。该查询将被放入他们的软件中以查询我的数据库。

所需的输出似乎可能与R 中的posixct 问题模糊相关;但这是关于 SQL Server 中的输出。除了该字段在他们的软件中显示为空白之外,我没有收到任何具体错误,但它在我的 SQL 界面中有效。

我从 SQL 得到的输出如下:

2016-03-16 00:00:00.000
Run Code Online (Sandbox Code Playgroud)

像这样的另一列的输出没有问题varchar(30)2016-03-16 11:34:36因为它只是在映射到字符串字段时将其视为字符串......但要使其处理它需要采用引用的%Y-%m-%d %H:%M:%OS4 %z格式。

除了数据类型之外,这些差异似乎很微妙,但即使映射到字符串字段,它也无法将 SQL 本机输出映射到其字段中。

我已经尝试过例如

cast(convert(datetime, tn.last_settled, 126) as Varchar(30))
Run Code Online (Sandbox Code Playgroud)

datetime结果Jan 1 1990 12:00AM不是所需的格式。

如何将所需的字符串2016-03-16 11:34:36和日期时间格式从 T-SQL 中的 SQL Server格式2016-03-16 00:00:00.000转换为所需的格式?%Y-%m-%d %H:%M:%OS4 %zdatetime

t-sql sql-server datetime sql-server-2012

1
推荐指数
1
解决办法
6459
查看次数

R将因子转换为数字

如何将其更改为数值,该数字指的是1.5km运行的记录,包含min:sec:十分之一秒

"4:04.86"  -> 4:04.86
Run Code Online (Sandbox Code Playgroud)

as.numeric函数在这种情况下不工作,我认为,因为':'

r numeric character

-3
推荐指数
1
解决办法
143
查看次数