我有一个数据框,其中包含此格式的日期2014-06-10 06:12:35 BRT
我会比较日期,看看它们是否属于同一社交日(每天凌晨3:00到3:00)。但是当我尝试只选择那一天时
format(as.Date(df$x,format="%Y-%m-%dT%H:%M:%SZ"), "%d"),
例如,有时他会增加+ 1
2014-06-13 22:54:36 BRT
它显示14
。
如果我试着花点时间
format(as.Date(df$x,format="%Y-%m-%dT%H:%M:%SZ"), "%H")
始终显示00
。
我应该如何处理R中的日期?
答案 0 :(得分:0)
在R中,时间使用POSIXct
和POSIXlt
类和日期使用Date
类。
日期存储为自1970年1月1日以来的天数,时间存储为自1970年1月1日以来的秒数。
所以,例如:
d <- as.Date("1971-01-01")
unclass(d) # one year after 1970-01-01
# [1] 365
pct <- Sys.time() # in POSIXct
unclass(pct) # number of seconds since 1970-01-01
# [1] 1450276559
plt <- as.POSIXlt(pct)
up <- unclass(plt) # up is now a list containing the components of time
names(up)
# [1] "sec" "min" "hour" "mday" "mon" "year" "wday" "yday" "isdst" "zone"
# [11] "gmtoff"
up$hour
# [1] 9
在日期和时间执行操作:
plt - as.POSIXlt(d)
# Time difference of 16420.61 days
要处理日期,您可以使用strptime()
(从手册页借用这些示例):
strptime("20/2/06 11:16:16.683", "%d/%m/%y %H:%M:%OS")
# [1] "2006-02-20 11:16:16 EST"
# And in vectorized form:
dates <- c("1jan1960", "2jan1960", "31mar1960", "30jul1960")
strptime(dates, "%d%b%Y")
# [1] "1960-01-01 EST" "1960-01-02 EST" "1960-03-31 EST" "1960-07-30 EDT"
处理您的具体日期[s]:
dateString <- "2014-06-10 06:12:35"
d <- strptime(dateString, "%Y-%m-%d %H:%M:%S")
注意: 我没有找到&#34; BRT&#34; R区域列表中的时区,所以我上面的时间设置为EDT时区:
"BRT" %in% OlsonNames()
# [1] FALSE