如何使用R在时间戳上正确添加毫秒

如何使用R在时间戳上正确添加毫秒,r,timestamp,posixct,R,Timestamp,Posixct,tick_count列的单位为100毫秒。我想加上日期时间的计时时间。但是结果不能正确执行加法。 例如,第二个值应该是“2014-08-15 12:51:02.6 EEST”,而不是“2014-08-15 12:51:02.5 EEST”,我不知道为什么会发生这种情况。它对我的结果造成了严重的影响,因为一段时间它会导致两行或三行同时出现。 如何处理这种情况 >head(status306$date_time) #[1] "2014-08-15 12:51:01 EEST" "2014-08

tick_count列的单位为100毫秒。我想加上日期时间的计时时间。但是结果不能正确执行加法。 例如,第二个值应该是“2014-08-15 12:51:02.6 EEST”,而不是“2014-08-15 12:51:02.5 EEST”,我不知道为什么会发生这种情况。它对我的结果造成了严重的影响,因为一段时间它会导致两行或三行同时出现。 如何处理这种情况

>head(status306$date_time)
#[1] "2014-08-15 12:51:01 EEST" "2014-08-15 12:51:01 EEST" "2014-08-15 12:51:01 EEST"
#[4] "2014-08-15 12:51:01 EEST" "2014-08-15 12:51:01 EEST" "2014-08-15 12:51:01 EEST"
> head(status306$tick_count/10)
#[1] 0.0 1.6 1.7 1.1 2.6 2.8
> head(status306$date_time +status306$tick_count/10)
#[1] "2014-08-15 12:51:01.0 EEST" "2014-08-15 12:51:02.5 EEST" "2014-08-15 12:51:02.7 EEST"
#[4] "2014-08-15 12:51:02.0 EEST" "2014-08-15 12:51:03.5 EEST" "2014-08-15 12:51:03.7 EEST"

更新

这是原始数据帧,我刚刚知道:p

structure(list(grint = c("C51CCF4CAACGGCC44", "C55CCF4CCCCGGCC44", 
"C55CCF4CCCCGGCC44", "C55CCF4CCCCGGCC44", "C55CCF4CCC011CC44", 
"C55CCF4CCC011CC44"), dint = c("0000010100001010000000000001110000000001100001000000", 
"0000010100001010000000000001110000000001100001000000", "0100010100001010000000000001110000000001100001000000", 
"0100010100001011000000000001110000000001100001000000", "0000010100001011000000000001110000000001100001000000", 
"0000010100001011000000000000100000000001100001000000"), tick_count = c(0L, 
16L, 17L, 11L, 26L, 28L), date_time = structure(c(1408096261, 
1408096261, 1408096261, 1408096261, 1408096261, 1408096261), class = c("POSIXct", 
"POSIXt"), tzone = ""), detector_signal_levels = c("135,1,163,1,165,5,167,167,5,167,5,163,3,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,", 
"135,5,163,1,165,5,167,167,5,167,5,163,3,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,", 
"135,5,163,1,165,5,167,167,5,167,5,163,3,169,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,", 
"135,5,163,1,165,5,167,7,5,167,5,163,3,169,77,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,", 
"135,5,163,1,165,5,167,7,9,167,1,163,3,169,121,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,", 
"135,5,163,1,165,5,167,7,9,15,1,163,3,169,123,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"
)), .Names = c("grint", "dint", "tick_count", "date_time", "detector_signal_levels"
), row.names = c(NA, 6L), class = "data.frame")
尝试:(如果您的输入是
字符
类)

更新2
status306$date\u time[4]我怀疑原因是您的
$date\u time
值包含毫秒,因此您没有添加您认为要添加的内容。显示的内容不一定与实际值具有相同的精度。
$date\u time
是POSIX类吗?是的,我想是POSIX类。这很奇怪,但我不认为原因是$date\u time值包括毫秒,因为实际上对于序列数据,它们是以数据包的形式发送的,date\u time是接收数据包的时间,时差大约是$tick\u count。@Chenlu我使用您的
dput
dataset更新了它并没有解决问题,因为您已经创建了字符串作为输入。@Carl Witthoft用户没有使用
dput
。所以,这是我唯一的选择,由于声誉问题,我不能发表评论。此外,字符串通过
strtime
转换。从OP的帖子中不清楚是
POSIXct
还是
POSIXlt
,这很好,但是你应该在你的答案中加入一些文字,比如“如果你的输入是chars,那么…”Carl Witthoft,很抱歉我没有这么说,输入日期时间不是字符串,它是POSIXct,类型是double。顺便说一句,“dput”是什么,如果convenient@Chenlu您可以使用
dput(head(status306))
将输出复制并粘贴到您的帖子中,以便其他人可以复制原始数据集的结构。
date_time <- c("2014-08-15 12:51:01", "2014-08-15 12:51:01", "2014-08-15 12:51:01",
         "2014-08-15 12:51:01", "2014-08-15 12:51:01", "2014-08-15 12:51:01")

date_time1 <- strptime(date_time, format="%Y-%m-%d %H:%M:%S", tz="EEST")
v1 <- c(0.0, 1.6,1.7,1.1, 2.6, 2.8)

date_time1$sec <- date_time1$sec+v1
op <- options(digits.secs=3)
date_time1
#[1] "2014-08-15 12:51:01.0 EEST" "2014-08-15 12:51:02.6 EEST"
#[3] "2014-08-15 12:51:02.7 EEST" "2014-08-15 12:51:02.1 EEST"
#[5] "2014-08-15 12:51:03.6 EEST" "2014-08-15 12:51:03.8 EEST"
date_time1 <- as.POSIXct(date_time, format="%Y-%m-%d %H:%M:%S", tz="EEST")
date_time1+v1
#[1] "2014-08-15 12:51:01.0 EEST" "2014-08-15 12:51:02.5 EEST"
#[3] "2014-08-15 12:51:02.7 EEST" "2014-08-15 12:51:02.0 EEST"
#[5] "2014-08-15 12:51:03.5 EEST" "2014-08-15 12:51:03.7 EEST"
 status306$date_time<- as.POSIXlt(status306$date_time)
 status306$date_time$sec <- with(status306, date_time$sec + tick_count/10)
 status306$date_time
 #[1] "2014-08-15 05:51:01.0 EDT" "2014-08-15 05:51:02.6 EDT"
 #[3] "2014-08-15 05:51:02.7 EDT" "2014-08-15 05:51:02.1 EDT"
 #[5] "2014-08-15 05:51:03.6 EDT" "2014-08-15 05:51:03.8 EDT"
  status306$date_time[4] <- as.POSIXct("2014-08-15 12:53:59")
  status306$date_time<- as.POSIXlt(status306$date_time)
  val <- with(status306, date_time$sec + tick_count/10)
  status306$date_time$sec <- ifelse(val >=60, val-60, val)
  status306$date_time$min <- ifelse(val >=60, status306$date_time$min+1, status306$date_time$min)

  status306$date_time
  #[1] "2014-08-15 05:51:01.0 EDT" "2014-08-15 05:51:02.6 EDT"
  #[3] "2014-08-15 05:51:02.7 EDT" "2014-08-15 12:54:00.1 EDT"
  #[5] "2014-08-15 05:51:03.6 EDT" "2014-08-15 05:51:03.8 EDT"



 options(op)