将数字字符串更改为日期格式

时间:2016-05-27 11:07:30

标签: r character insertion

我在数字字符串中有以下数据帧,日期为23/09/15。

Date     Session
230915       2  
230915       2 
230915       2   
230915       2  
230915       2  
230915       2  

我想改变"日期"专栏,以便它" 23/09/15"。我想这样做的最简单方法是插入" /"在第2和第4个字符之后。

我试过这样做:

sub( '(?<=.{2})', '/', df$Date, perl=TRUE )

但得到了错误:

数据错误$ Date:$运算符对原子向量无效

还尝试使用以下方式编辑日期格式:

df$Date <- as.Date(data1$Date, format="%d/%m/%Y")

专栏回来了NA。为什么呢?

2 个答案:

答案 0 :(得分:2)

一种方法是使用dmy

中的lubridate
v1 <- dmy(df1$Date)
v1
#[1] "2015-09-23" "2015-09-23" "2015-09-23" "2015-09-23" "2015-09-23" "2015-09-23"

最好将其存储为Date格式。但是,如果所需的格式不同

format(v1, "%d/%m/%y")
#[1] "23/09/15" "23/09/15" "23/09/15" "23/09/15" "23/09/15" "23/09/15"

答案 1 :(得分:1)

你可以做到

df <- read.table(header=T, text="Date     Session
230915       2  ")  
gsub( '(..)\\B', '\\1/', df$Date )
# [1] "23/09/15"

(x <- as.Date(as.character(df$Date), format="%d%m%y"))
# [1] "2015-09-23"
format(x, "%d/%m/%y")
# [1] "23/09/15"

但是,如果df是向量,则没有$子集化选项:

df <- df$Date
gsub( '(..)\\B', '\\1/', df$Date )
# Error in df$Date : $ operator is invalid for atomic vectors