如何连续(有条件)添加毫秒到R中的日期?

时间:2016-11-17 03:33:07

标签: r

我是R的新手,所以我不确定此问题是否已经得到解答。 (也是我第一次在这里提问,不确定我是否遵守了正确的格式。)

基本上我想连续10毫秒添加到我的数据中的每个唯一时间戳。

我的数据是什么样的:

17:30:20.12
17:30:20.12
17:30:20.12
17:30:20.12
17:30:20.12
17:30:20.12
17:31:21.48
17:31:21.48
17:31:21.48
17:31:21.48
17:31:21.48
17:31:21.48

我希望它看起来像:

17:30:20.12
17:30:20.13
17:30:20.14
17:30:20.15
17:30:20.16
17:30:20.17
17:31:21.48
17:31:21.49
17:31:21.50
17:31:21.51
17:31:21.52
17:31:21.53

这可能在R?提前谢谢!

2 个答案:

答案 0 :(得分:2)

是的,非常可能。

只需创建添加矢量,即N次0.1秒,然后将其添加到时间列。简化为:

R> now <- Sys.time()
R> now                 # I have options("digits.secs"=6)
[1] "2016-11-16 21:37:55.502532 CST"
R> now <- trunc(now)   # truncate to 'round' secondss
R> addThis <- 0.010001 * 0:4   # need some fudge for display
R> now + addThis
[1] "2016-11-16 21:37:55.000000 CST" "2016-11-16 21:37:55.010000 CST"
[3] "2016-11-16 21:37:55.020001 CST" "2016-11-16 21:37:55.030003 CST"
[5] "2016-11-16 21:37:55.040004 CST"
R> 

双打的不精确性在这里得到了我们,所以我们不能使用0.01 * 0:4但是添加了一点“绒毛”。在您的实际应用程序中,您可以根据需要进行调整。

关于唯一性的条件可以添加标准向量操作技巧,即计算差异和测试不同于零。然后你可以通过积累来获得序列等。

答案 1 :(得分:0)

假设您的数据是data.frame中的一列,我为此感谢data.table

首先,我使用read.table()将您的数据读入data.frame。然后,通过首先添加任意一天将时间戳设置为新列(V2)为POSIXct类(不确定是否存在R中没有日期的时间...)。然后将data.frame设置为data.table

    library(data.table)
    x$V2 <- as.POSIXct(paste("2016-11-16", x$V1))
    setDT(x)
    x[, V3 := V2 + (0:.N)/10, by=V2]

最后,使用data.table语法通过引用设置新列,我们可以得到一个从0到.N的向量(.N是每组观察的长度by=中指定的列中的相同值,在本例中为V2)。然后我们将该向量除以10得到毫秒,从0开始,并将其添加到V2列中的原始时间。