如何在R中将时间戳设置为数据帧的索引

时间:2018-10-30 03:48:54

标签: r dataframe indexing

我有一个称为“试用”的数据框。我将数据帧中的日期和时间组合在一起,以将时间戳记作为POSIXct的字段。我想为我的数据框“试用版”设置组合的日期时间或时间戳,该怎么办?我已经看到类似的问题,但没有成功。 代码如下:

 trial <- read.csv("2018_05_04_h093500.csv", header=TRUE, skip = 16, sep=",")
 trial$Date <- with(trial, as.POSIXct(paste(as.Date(Date, format="%Y/%m/%d"), Time)))
 dtPOSIXct <- as.POSIXct(trial$Date )
 dtTime <- as.numeric(dtPOSIXct - trunc(dtPOSIXct, "days"))
 class(dtTime) <- "POSIXct"

1 个答案:

答案 0 :(得分:0)

如果您要说的是与熊猫中的索引等效的R,那么它们不能是POSIXct日期时间,而必须是字符。

# sample data
x <- data.frame('a' = 1:3, 'b' = c('a', 'b', 'c'))
print(x)

#                    a b
#2018-01-01 15:51:33 1 a
#2018-01-04 11:42:31 2 b
#2018-01-07 22:04:41 3 c

dates <- c('2018-01-01 15:51:33', '2018-01-04 11:42:31', '2018-01-07 22:04:41')
rownames(x) <- as.POSIXct(dates, format = '%Y-%m-%d %H:%M:%S')
print(class(rownames(x)[1]))
# [1] "character"

也就是说,您仍然可以在评估时将它们强制转换为POSIXct(或其他任何类),但这会带来一些开销和代码混乱:

# print x where rownames, when coerced to POSIXct, represent dates after d
d <- as.POSIXct('2018-01-03 00:00:00', '%Y-%m-%d %H:%M:%S')
x[as.POSIXct(rownames(x), format = f) > d, ]

#                    a b
#2018-01-04 11:42:31 2 b
#2018-01-07 22:04:41 3 c

但是,也许更简单的方法是仅使任意列有效地充当日期时间索引:

x$date <- as.POSIXct(dates, format = '%Y-%m-%d %H:%M:%S')
class(x$date[1])
# [1] "POSIXct" "POSIXt"