格式化R中的日期

时间:2015-10-24 08:56:28

标签: r string gsub

我的日期值如下

"'2015-10-24'"
class Character

我正在尝试格式化此值,使其看起来像'10/24/2015'

我知道如何使用noquote函数并删除引号和gsub函数以将-替换为/,但我不知道如何切换年份,日期和月份,看起来像'10 / 24/2015'

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:6)

我们可以在使用Date移除'之后转换为gsub课程,然后使用format获取预期的输出

format(as.Date(gsub("'", '', v1)), "'%m/%d/%Y'")
#[1] "'10/24/2015'" "'10/25/2015'"

或者,如果不使用gsub删除',我们也可以在'内的format中指定as.Date

format(as.Date(v1, "'%Y-%m-%d'"), "'%m/%d/%Y'") 
#[1] "'10/24/2015'" "'10/25/2015'"

如果我们使用library(lubridate)

,这可以更加紧凑
library(lubridate)
format(ymd(v1), "'%m/%d/%Y'")
#[1] "'10/24/2015'" "'10/25/2015'"

如果我们不需要输出中的',我们就不必以格式指定

format(ymd(v1), "%m/%d/%Y")
#[1] "10/24/2015" "10/25/2015"

或者我们可以通过将字符捕获为一组来仅使用gsub来执行此操作。在下面的代码中,我们将前4个字符(.{4})作为一组捕获,方法是用括号括起,然后匹配-,然后捕获接下来的两个字符,然后是-,并捕获最后两个字符。在替换中,我们可以根据需要对捕获组进行洗牌。在这种情况下,第二个捕获组应首先(\\2)后跟/,然后是第三个(\\3),依此类推......

 gsub('(.{4})-(.{2})-(.{2})', '\\2/\\3/\\1', v1)
 #[1] "'10/24/2015'" "'10/25/2015'"

要避免引号,

 gsub('.(.{4})-(.{2})-(.{2}).', '\\2/\\3/\\1', v1)
 #[1] "10/24/2015" "10/25/2015"

此外,还有其他方法,例如拆分字符串

vapply(strsplit(v1, "['-]"), function(x) paste(x[c(3,4,2)], collapse='/'), character(1))
#[1] "10/24/2015" "10/25/2015"

或者像以前一样使用str_extract_allpaste提取数字部分。

 library(stringr)
 vapply(str_extract_all(v1, '\\d+'), function(x) 
               paste(x[c(2,3,1)], collapse='/'), character(1))   
 #[1] "10/24/2015" "10/25/2015"

数据

v1 <- c("'2015-10-24'", "'2015-10-25'")

答案 1 :(得分:2)

您还可以使用函数strftime来获得结果

d <- "'2015-10-24'"
strftime(as.Date(gsub("'", "", d)), "%m/%d/%Y")

# [1] "10/24/2015"