如何删除列中的多个字符串并将其替换为日期
Posted
技术标签:
【中文标题】如何删除列中的多个字符串并将其替换为日期【英文标题】:How can I delete multiple character strings in a column and replace it with date 【发布时间】:2021-01-21 16:13:49 【问题描述】:我有一个日期列,其值如下:2003MM01
、2003MM02
、2003MM03
你可以猜到MM01
代表第一个月,MM02
代表第二个月,等等。如果我从我的数据框中查看结构,它会说日期列是一个字符。我想要这样的日期列。
date column
2003-01-01
2003-02-01
2003-03-01
2003-04-01
2003-05-01
我还必须提到我的日期列有多年使用相同的字符串,所以2004MM01
、2005MM01
等。知道如何用正确的日期替换字符串吗?并将日期列从字符转换为日期?
【问题讨论】:
【参考方案1】:vec <- c("2003MM01", "2003MM02", "2003MM03", "2004MM01", "2005MM01")
as.Date(gsub("MM(.*)$", "-\\1-01", vec))
# [1] "2003-01-01" "2003-02-01" "2003-03-01" "2004-01-01" "2005-01-01"
【讨论】:
【参考方案2】:尝试这种base R
方法,也使用paste0()
添加日期,然后使用as.Date()
转换为日期。代码如下:
#Data
df <- data.frame(date=c('2003MM01', '2003MM02', '2003MM03'),stringsAsFactors = F)
#Format date
df$Col1 <- as.Date(paste0(df$date,'01'),'%YMM%m%d')
输出:
date Col1
1 2003MM01 2003-01-01
2 2003MM02 2003-02-01
3 2003MM03 2003-03-01
【讨论】:
【参考方案3】:我们可以从lubridate
使用ymd
library(lubridate)
library(stringr)
ymd(str_remove(vec, "MM"), truncated = 2)
#[1] "2003-01-01" "2003-02-01" "2003-03-01" "2004-01-01" "2005-01-01"
数据
vec <- c("2003MM01", "2003MM02", "2003MM03", "2004MM01", "2005MM01")
【讨论】:
以上是关于如何删除列中的多个字符串并将其替换为日期的主要内容,如果未能解决你的问题,请参考以下文章