如何删除列中的多个字符串并将其替换为日期

Posted

技术标签:

【中文标题】如何删除列中的多个字符串并将其替换为日期【英文标题】:How can I delete multiple character strings in a column and replace it with date 【发布时间】:2021-01-21 16:13:49 【问题描述】:

我有一个日期列,其值如下:2003MM012003MM022003MM03 你可以猜到MM01 代表第一个月,MM02 代表第二个月,等等。如果我从我的数据框中查看结构,它会说日期列是一个字符。我想要这样的日期列。

date column
2003-01-01
2003-02-01
2003-03-01
2003-04-01
2003-05-01

我还必须提到我的日期列有多年使用相同的字符串,所以2004MM012005MM01 等。知道如何用正确的日期替换字符串吗?并将日期列从字符转换为日期?

【问题讨论】:

【参考方案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")

【讨论】:

以上是关于如何删除列中的多个字符串并将其替换为日期的主要内容,如果未能解决你的问题,请参考以下文章

如何删除数据框列中的空格并向其添加字符串“NA”?

如何删除python中的打印文本并将其替换为另一个文本[重复]

如何用 0 替换 varchar 列中的所有非数字值

如何删除/替换字符串列中的一系列特殊字符? [关闭]

从列中删除所有值并将其设为空白 [重复]

从列中删除逗号,空格和“NULL”字符串为0(零)