添加第二个重复的POSIXct日期

Jul*_*lia 4 r dataframe posixct

我试图在我的数据框中的任何重复日期添加单秒.

即从这个:

       value                date
       18        2013-07-09 16:49:23
       62        2013-07-09 18:01:36
       64        2013-07-09 18:46:51
       29        2013-07-09 18:46:51
       22        2013-07-09 18:46:51
....
Run Code Online (Sandbox Code Playgroud)

我想得到这个:

       value                date
       18        2013-07-09 16:49:23
       62        2013-07-09 18:01:36
       64        2013-07-09 18:46:51
       29        2013-07-09 18:46:52
       22        2013-07-09 18:46:53
....
Run Code Online (Sandbox Code Playgroud)

我知道我可以简单地将+ 1或+2添加到POSIXct格式以添加秒数 - 但是我不知道如何选择重复项.请注意,我的数据帧长度为几百行,日期最多可连续出现20次.

我想在这些方面做点什么:

for (item in duplicated(dataframe$date)) {
    if (item == TRUE) {
        for (n in 1:#length of duplicated dates) {
        dataframe[index(item) +n]$date <- (dataframe[index(item) +n]$date +n)
        } } }
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助!

Hen*_*rik 6

您可以尝试使用rle计算相等日期的运行长度.然后使用重复的长度和sequence计算需要添加的秒数.

r <- rle(as.numeric(df$date))$lengths
r
# [1] 1 1 3

to.add <- sequence(r) - 1
to.add
# [1] 0 0 0 1 2

df$date2 <- df$date + to.add

# Suggestion from @agstudy to make it more general:
df$date2 <- df$date + as.difftime(to.add, unit = "secs")

df[ , c("date", "date2")]
#                  date               date2
# 1 2013-07-09 16:49:23 2013-07-09 16:49:23
# 2 2013-07-09 18:01:36 2013-07-09 18:01:36
# 3 2013-07-09 18:46:51 2013-07-09 18:46:51
# 4 2013-07-09 18:46:51 2013-07-09 18:46:52
# 5 2013-07-09 18:46:51 2013-07-09 18:46:53
Run Code Online (Sandbox Code Playgroud)

您还可以查看一些关于修复重复时间索引的示例?zoo(未对您的数据进行测试).


Jos*_*ich 5

您可以make.index.unique在xts包中使用.

x <- structure(list(value = c(18, 62, 64, 29, 22),
  date = structure(c(1373406563, 1373410896, 1373413611, 1373413611, 1373413611),
  class = c("POSIXct", "POSIXt"), tzone = "")), .Names = c("value", "date"),
  row.names = c(NA, -5L), class = "data.frame")
x$date.unique <- make.index.unique(x$date,1)
x
#   value                date         date.unique
# 1    18 2013-07-09 16:49:23 2013-07-09 16:49:23
# 2    62 2013-07-09 18:01:36 2013-07-09 18:01:36
# 3    64 2013-07-09 18:46:51 2013-07-09 18:46:51
# 4    29 2013-07-09 18:46:51 2013-07-09 18:46:52
# 5    22 2013-07-09 18:46:51 2013-07-09 18:46:53
Run Code Online (Sandbox Code Playgroud)