更新答案:从您的示例数据开始,您可以这样做
data$Date <- as.POSIXct(as.character(data$Date), format = "%Y%m%d%H%M")
将列更改为 POSIX 日期时间值。然后,要将日期和时间提取到两个单独的列中,您可以这样做
data$date <- as.character(as.Date(data$Date))
data$time <- format(data$Date, "%T")
这给出了以下更新的数据框data
Index Date rank amount date time
1 81211 2010-04-09 00:00:00 11 4.9 2010-04-09 00:00:00
2 81212 2010-04-09 01:00:00 11 4.6 2010-04-09 01:00:00
3 81213 2010-04-09 02:00:00 11 3.3 2010-04-09 02:00:00
4 81214 2010-04-09 03:00:00 11 2.7 2010-04-09 03:00:00
5 81215 2010-04-09 04:00:00 11 3.1 2010-04-09 04:00:00
6 81216 2010-04-09 05:00:00 11 3.7 2010-04-09 05:00:00
7 81217 2010-04-09 06:00:00 11 4.0 2010-04-09 06:00:00
8 81218 2010-04-09 07:00:00 11 4.2 2010-04-09 07:00:00
9 81219 2010-04-09 08:00:00 11 4.2 2010-04-09 08:00:00
10 81220 2010-04-09 09:00:00 11 4.0 2010-04-09 09:00:00
原答案:如果您从数值开始,请将其包装在 as.character() 中,然后通过 as.POSIXct() 运行以获取 POSIX 日期时间值。
data$Date <- as.POSIXct(as.character(data$Date), format = "%Y%m%d%H%M")
作为一个例子,我将使用你给的201001011200。
(x <- as.POSIXct(as.character(201001011200), format = "%Y%m%d%H%M"))
# [1] "2010-01-01 12:00:00 PST"
然后要分离出日期和时间,您可以执行以下操作。
list(as.Date(x), format(x, "%T"))
# [[1]]
# [1] "2010-01-01"
#
# [[2]]
# [1] "12:00:00"
这分别给出了日期和字符分类项目。对于普通的旧字符向量,只需使用两次format()。
c(format(x, "%m-%d-%Y"), format(x, "%T"))
# [1] "01-01-2010" "12:00:00"
或
c(as.character(as.Date(x)), format(x, "%T"))
# [1] "2010-01-01" "12:00:00"