我的日期值如下
"'2015-10-24'"
class Character
我正在尝试格式化此值,使其看起来像'10/24/2015'
我知道如何使用noquote
函数并删除引号和gsub
函数以将-
替换为/
,但我不知道如何切换年份,日期和月份,看起来像'10 / 24/2015'
非常感谢任何帮助。
答案 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_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"
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"