我是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?提前谢谢!
答案 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列中的原始时间。