【问题标题】:How to convert a date column of a R dataframe to a certain string format如何将 R 数据框的日期列转换为特定的字符串格式
【发布时间】:2018-07-07 10:05:07
【问题描述】:

我想将 R 中数据框的一列转换为具有字符串格式的新列,并仅提取 daymonth。数据框的格式可能如下所示,其中日期已经是 Date 类型:

Name,Date,Salary
Bob,12/31/18,1000
Alice,10/28/18,100
John,05/06/17,200 

所以目标df应该是这样的:

Name,Date,Day,Month,Salary
Bob,12/31/18,31,12,1000
Alice,10/28/18,28,10,100
John,05/06/17,06,05,200 

【问题讨论】:

    标签: r


    【解决方案1】:

    使用format。如果列的顺序不重要,末尾的[...] 部分可以省略。

    transform(DF, Day = format(Date, "%d"), Month = format(Date, "%m"))[
      c("Name", "Date", "Day", "Month", "Salary")]
    

    给予:

       Name       Date Day Month Salary
    1   Bob 2018-12-31  31    12   1000
    2 Alice 2018-10-28  28    10    100
    3  John 2017-05-06  06    05    200
    

    鉴于 Date 已经是一列,您是否真的需要首先添加 Day 和 Month 列也存在一些问题。根据您的用途,在需要时动态提取它可能更方便。

    注意

    假设可重现形式的输入为:

    Lines <- "Name,Date,Salary
    Bob,12/31/18,1000
    Alice,10/28/18,100
    John,05/06/17,200"
    
    DF <- read.csv(text = Lines)
    DF$Date <- as.Date(DF$Date, "%m/%d/%y")
    

    【讨论】:

    • 刚刚发现 Test$Day
    • 它相似但不完全相同,因为它修改了test,而transform 保留它输出结果。如果你想覆盖输入,你可以写test &lt;- transform(...),或者如果你想保留输入,你可以写test2 &lt;- transform(...),这样你就可以从头开始重新创建它。
    【解决方案2】:

    对于基本 R 解决方案,我们可以尝试使用第一个 as.Date 将您的字符串日期转换为真正的 R 日期。然后,我们可以将这些日期转换为 POSIXlt 对象,以提取日和月组件。

    x <- "12/31/18"
    date <- as.Date(x, "%m/%d/%y")
    day <- as.POSIXlt(date)$yday + 1
    month <- as.POSIXlt(date)$mon + 1
    
    day
    month
    
    [1] 365
    [1] 12
    

    Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-30
      • 2021-06-10
      • 2014-09-12
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2017-12-24
      • 2020-08-10
      相关资源
      最近更新 更多