在数据框中拆分日期和时间
splitting date and time in data frame
我在数据框中有一个日期列列表,日期格式 201001011200
为 %Y%m%d%H%M
。我想将它们拆分为 %Y%m%d
和 %H%M
作为日期和时间。
我尝试 as.Date(data$Date,origin = "1970-01-01")
但我收到一条错误消息
Error in charToDate(x) : character string is not in a standard
unambiguous format
日期的class是numeric
。所以我尝试将其转换为 character
并应用上述 as.Date
函数但没有帮助。
有什么想法吗?提前谢谢你。
编辑
这是我的数据样本:
Index Date rank amount
81211 201004090000 11 4.9
81212 201004090100 11 4.6
81213 201004090200 11 3.3
81214 201004090300 11 2.7
81215 201004090400 11 3.1
81216 201004090500 11 3.7
81217 201004090600 11 4.0
81218 201004090700 11 4.2
81219 201004090800 11 4.2
81220 201004090900 11 4.0
更新答案: 从您的示例数据开始,您可以
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"
我在数据框中有一个日期列列表,日期格式 201001011200
为 %Y%m%d%H%M
。我想将它们拆分为 %Y%m%d
和 %H%M
作为日期和时间。
我尝试 as.Date(data$Date,origin = "1970-01-01")
但我收到一条错误消息
Error in charToDate(x) : character string is not in a standard unambiguous format
日期的class是numeric
。所以我尝试将其转换为 character
并应用上述 as.Date
函数但没有帮助。
有什么想法吗?提前谢谢你。
编辑
这是我的数据样本:
Index Date rank amount
81211 201004090000 11 4.9
81212 201004090100 11 4.6
81213 201004090200 11 3.3
81214 201004090300 11 2.7
81215 201004090400 11 3.1
81216 201004090500 11 3.7
81217 201004090600 11 4.0
81218 201004090700 11 4.2
81219 201004090800 11 4.2
81220 201004090900 11 4.0
更新答案: 从您的示例数据开始,您可以
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"