格式化R中的日期

Hea*_*rah 1 string r gsub

我有一个日期值如下

"'2015-10-24'"
class Character
Run Code Online (Sandbox Code Playgroud)

我试图格式化这个值,使它看起来像这样 '10/24/2015'

我知道如何使用noquote功能和剥离引号和gsub功能来替换-,/但我不知道如何切换年,日期和月份,使它看起来像这个'10/24/2015'

任何帮助深表感谢.

akr*_*run 6

我们可以Date在删除'with 之后转换为类gsub,然后使用format来获得预期的输出

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

或者不使用gsub删除',我们也可以'format内部指定as.Date

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

如果我们使用,这可以变得更紧凑 library(lubridate)

library(lubridate)
format(ymd(v1), "'%m/%d/%Y'")
#[1] "'10/24/2015'" "'10/25/2015'"
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

为了避免报价,

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

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

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

或者像以前一样用str_extract_all和提取数字部分paste.

 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"
Run Code Online (Sandbox Code Playgroud)

数据

v1 <- c("'2015-10-24'", "'2015-10-25'")
Run Code Online (Sandbox Code Playgroud)