在数据框中分割日期和时间

时间:2016-06-26 00:06:45

标签: r date dataframe split datetime-format

我在数据框中有一个日期列列表,日期格式201001011200%Y%m%d%H%M。我想将它们分为%Y%m%d%H%M作为日期和时间。

我尝试as.Date(data$Date,origin = "1970-01-01"),但收到了错误消息

  

charToDate(x)出错:字符串不在标准中   明确的格式

日期的类别为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

1 个答案:

答案 0 :(得分:3)

更新后的答案:从您的示例数据开始,您可以

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"