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

时间:2018-07-07 10:05:08

标签: r

我想将R中的数据框的列转换为具有字符串格式的新列,并仅提取例如 day month 。数据框的格式可能看起来像这样,其中日期已经具有日期类型:

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 

2 个答案:

答案 0 :(得分:2)

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

还有一个问题,考虑到“日期”已经是一列,您是否真的需要首先添加“日”和“月”列。根据需要使用它,可能会更方便地随时提取它。

注意

可重复输入的形式假定为:

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")

答案 1 :(得分: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