【问题标题】:splitting date and time in data frame [duplicate]在数据框中拆分日期和时间[重复]
【发布时间】:2016-10-28 07:00:37
【问题描述】:

我在数据框中有一个日期列列表,日期格式为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

【问题讨论】:

    标签: r date dataframe split datetime-format


    【解决方案1】:

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

    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"  
    

    【讨论】:

    • 击败我.. OP 说他们从数字开始,但他们已经知道如何使用 as.character(),所以你的回答应该让他们在剩下的路上得到他们......
    • @Richard Scriven 以上日期201001011200 只是Date 列中的日期之一。日期随着小时的增加而改变。所以,我有大约 100K 行。上述解决方案无效。
    • 我也用了data$Date&lt;-as.POSIXct("data$Date",format="%Y%m%d%H%M"),所有的日期都改成了NA的
    • @RichardScriven 您在评论部分的解决方案运行良好。我使用以下内容将其拆分为日期和时间:data$Date &lt;- as.Date(data$Date)data$Time &lt;- format(data$Date,"%H:%M"),但对于时间的数据框,它只列出了整列的 0.00。这是为什么呢?
    • @RichardScriven 为什么data$Time &lt;- format(data$Date,"%H:%M") 不起作用?我还按照您的上述解决方案尝试了 `data$Time
    猜你喜欢
    • 1970-01-01
    • 2021-09-16
    • 2019-05-08
    • 1970-01-01
    • 2015-04-04
    • 1970-01-01
    • 2021-08-16
    • 2021-11-08
    • 2012-03-07
    相关资源
    最近更新 更多