代码之家  ›  专栏  ›  技术社区  ›  Rene B.

如何将r数据帧的日期列转换为特定的字符串格式

r
  •  1
  • Rene B.  · 技术社区  · 6 年前

    我想将r中数据帧的一列转换为字符串格式的新列,并只提取 白天 或者 是的。数据帧的格式可能如下所示,其中日期已经具有类型Date:

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

    目标测向应该是这样的:

    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 
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   G. Grothendieck    6 年前

    使用 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
    

    还有一个问题是,考虑到日期已经是一个列,您是否真的需要首先添加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")
    
        2
  •  2
  •   Tim Biegeleisen    6 年前

    对于基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