格式化R中的日期
formatting the date in R
我有一个日期值如下
"'2015-10-24'"
class Character
我正在尝试格式化此值,使其看起来像这样 '10/24/2015'
我知道如何使用 noquote
函数并去除引号和 gsub
函数以将 -
替换为 /
但我不确定如何切换年份、日期和月份,使其看起来像这样 '10/24/2015'
非常感谢任何帮助。
我们可以在用gsub
去掉'
后转换为Date
class,然后用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_all
和 paste
ing 提取数字部分。
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"
我有一个日期值如下
"'2015-10-24'"
class Character
我正在尝试格式化此值,使其看起来像这样 '10/24/2015'
我知道如何使用 noquote
函数并去除引号和 gsub
函数以将 -
替换为 /
但我不确定如何切换年份、日期和月份,使其看起来像这样 '10/24/2015'
非常感谢任何帮助。
我们可以在用gsub
去掉'
后转换为Date
class,然后用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_all
和 paste
ing 提取数字部分。
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"