格式化R中的日期

formatting the date in R

我有一个日期值如下

"'2015-10-24'"
class Character

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

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

非常感谢任何帮助。

我们可以在用gsub去掉'后转换为Dateclass,然后用format得到预期的输出

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

或者不用gsub去掉',我们也可以在as.Date

中的format中指定'
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_allpasteing 提取数字部分。

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

你也可以使用函数strftime得到结果

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

# [1] "10/24/2015"