我有一个带有时间戳的大型数据框,如下所示:
"2019-05-15T01:42:15.072Z"
Run Code Online (Sandbox Code Playgroud)
如何将此字符串解析为真正的日期时间格式?
数据中的字符 (T和) 似乎使其变得困难。Z
我写了一个函数,当提供一系列日期时,一周中特定日期的名称和某一月份中某一天的发生(例如,每个月的第二个星期五)将返回相应的日期.然而,它不是很快,我不是100%相信它的稳健性.R中是否有一个包或一组函数可以对POSIX对象进行这些操作?提前致谢!
转换为POSIXct时会发生非常奇怪的事情:
> as.POSIXct("2008-03-30 02:00:00",format="%Y-%m-%d %H:%M:%S")
[1] NA
Run Code Online (Sandbox Code Playgroud)
但:
> as.POSIXct("2008-02-28 02:00:00",format="%Y-%m-%d %H:%M:%S")
[1] "2008-02-28 02:00:00 CET"
Run Code Online (Sandbox Code Playgroud)
我很无能为力.这是R中的一个错误吗?它可能与我的德国(柏林)地区有关吗?我正在使用R 2.14.2 for windows.
考虑以下R代码,它用一组POSIXct值替换数据框的一列中的值:
foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXct(rep(5,5), origin="1970-1-1", tz="c")
foo[,1] <- bar
Run Code Online (Sandbox Code Playgroud)
我的问题:当我尝试使用POSIXlt时,为什么同样的操作失败?例如:
foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXlt(rep(5,5), origin="1970-1-1", tz="c")
foo[,1] <- bar
Warning message:
In `[<-.data.frame`(`*tmp*`, , 1, value = list(sec = c(5, 5, 5, :
provided 9 variables to replace 1 variables
Run Code Online (Sandbox Code Playgroud)
此外,如果我按名称而不是索引引用列,则相同的赋值可以正常工作:
foo$bar <- bar
foo <- as.data.frame(list(bar=rep(5,5)))
bar <- as.POSIXlt(rep(5,5), origin="1970-1-1", tz="c")
foo$bar <- bar
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
我在csv中读到了一个数据框,如下所示:
data <- read.csv("Prices.csv", stringsAsFactors = FALSE)
data$Timestamp <- as.POSIXct(data$Timestamp, format="%m/%d/%y %H:%M")
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面但是删除了小时和分钟数据这是我的问题.如何与as.Date一起使用但保留所有信息?
data$Timestamp <- as.Date(data$Timestamp, format="%m/%d/%y %H:%M")
Run Code Online (Sandbox Code Playgroud)
这是使用上面的as.POSIXct命令的数据$ Timestamp看起来很好:
head(data$Timestamp)
[1] "2013-11-01 09:31:00 EDT" "2013-11-01 09:32:00 EDT" "2013-11-01 09:34:00 EDT" "2013-11-01 09:35:00 EDT"
[5] "2013-11-01 09:36:00 EDT" "2013-11-01 09:37:00 EDT"
Run Code Online (Sandbox Code Playgroud)
这是原始csv文件中的一些数据点:
Timestamp
11/1/13 9:31
11/1/13 9:32
11/1/13 9:34
11/1/13 9:35
11/1/13 9:36
11/1/13 9:37
Run Code Online (Sandbox Code Playgroud)
谢谢.
我希望这个问题比较简单.我正在尝试在R中打印出一些日期,但需要输出为特定格式,每天使用一个字符,例如:2/10/2013
这是我正在尝试做的一个例子:
date_time <- as.POSIXct(paste("3/02/2012", "00:10:09", sep=" "), format="%d/%m/%Y %H:%M:%S")
print(format(date_time, "%d/%m/%Y %H:%M:%S"))
Run Code Online (Sandbox Code Playgroud)
哪个回报
"03/02/2012 00:10:09"
Run Code Online (Sandbox Code Playgroud)
但我想要的是没有领先的0,就像这样:
"3/02/2012 00:10:09"
Run Code Online (Sandbox Code Playgroud)
知道如何以这种方式格式化吗?请注意,对于2位数的日子,我仍然希望返回两个数字,对于月份,我总是想要2个数字.
PS.是的,在澳大利亚,我们格式化日期dd/mm/yyyy
无法弄清楚我在这里做错了什么.
require(data.table)
dt = data.table( ts=seq( ISOdate(2014,1,1), ISOdate(2014,1,2), by='hour') )
dt[, day:=trunc(ts, 'days') ]
Run Code Online (Sandbox Code Playgroud)
在"日"栏中给我一个长度为9的列表?!
v = trunc( dt$ts, 'days' )
Run Code Online (Sandbox Code Playgroud)
给我一个长度为25的向量.
dt[, day.test:=v ]
Run Code Online (Sandbox Code Playgroud)
再给我一个长度为9的列表"day.test"?!
通常,我使用chron来表示日期/时间对象.但是,我需要使用一些与POSIX格式一起使用的函数,所以我试图从chron转到POSIXct.使用as.POSIXct()似乎可以工作,但结果是在本地时间而不是GMT(原始数据在GMT中).
x <- chron(dates="05/12/15", times="12:30:45")
as.POSIXct(x, tz="GMT")
"2015-05-12 13:30:45 BST"
Run Code Online (Sandbox Code Playgroud)
我想要的是:
"2015-05-12 12:30:45 GMT"
Run Code Online (Sandbox Code Playgroud)
但我找不到获得它的方法.
strptime()将无法工作,因为原始输入不是字符串,而是chron对象.当然,我可以从一个chron对象转到一个字符串,然后转到POSIXct,但这似乎有点令人费解.
我想我可以强制我的R会话使用GMT和Sys.timezone(),但我不愿意.还有其他建议吗?谢谢.
我有PosixCt格式的大型日期数据框。我的目标很简单:将所有日期更改为一天-2016-05-01-同时保持所有时间相同。如果转换sample$newtime为字符,我将如何继续替换字符串(每行)中的前10个字符?
> class(sample$newtime)
[1] "POSIXct" "POSIXt"
> head(sample)
newtime
1 2016-05-01 02:25:34
2 2016-05-01 02:20:23
3 2016-05-01 02:13:58
4 2016-05-01 02:10:33
5 2016-05-01 02:07:36
6 2016-05-01 02:03:01
> dim(sample)
[1] 92020 1
> range(sample$newtime)
[1] "2015-01-01 01:04:29 MSK" "2016-06-15 12:45:03 MSK"
Run Code Online (Sandbox Code Playgroud) 我创建了一个时间序列数据框,我将用它来合并其他时间序列数据.
dates2010 <- seq(as.POSIXct("2010-06-15 00:00:00", tz = "GMT"), as.POSIXct("2010-09-15 23:00:00", tz = "GMT"), by="hour") # make string of DateTimes for summer 2010
dates2011 <- seq(as.POSIXct("2011-06-15 00:00:00", tz = "GMT"), as.POSIXct("2011-09-15 23:00:00", tz = "GMT"), by="hour") # make string of DateTimes for summer 2011
dates <- c(dates2010, dates2011) # combine the dates from both years
sites <- c("a", "b", "c") # make string of all sites
datereps <- rep(dates, length(sites)) # repeat the date string the same number of times as …Run Code Online (Sandbox Code Playgroud) posixct ×10
r ×10
date ×2
datetime ×2
posix ×2
assign ×1
chron ×1
data.table ×1
dataframe ×1
formatting ×1
replace ×1
statistics ×1
time ×1
time-series ×1
weekday ×1