将字符向量中的日期替换为特定格式

2024-01-29

我得到以下字符向量:

"On the evening of 2017-04-23, I was too tired"
"to complete my homework that was due on 24.04.2017."

我需要搜索它以查找所有出现的日期,并将其替换为“Monthname D, YYYY”格式。

我知道一般格式应该是 %B %d, %Y 并且我可能必须使用sub()功能,但我不太确定如何将两者结合在一起。

当我尝试类似的事情时

sub("[0-9]{2}.[0-9]{2}.[0-9]{4}","%B %d, %Y",x)

我刚刚得到以下结果

"On the evening of 2001-01-15, I was too tired to complete my homework that was due on %B %d, %Y."

有人可以帮我弄清楚如何将它们整合在一起吗?


在 stackoverflowers 的帮助下我的新代码如下:

streamlineDates(x)
{
#set pattern to dates in form of YYYY-MM-DD or DD.MM.YYYY
pattern <- "\\d{2,4}[.-]\\d{2}[.-]\\d{2,4}"

y <- c(x)

val <- unlist(regmatches(y, gregexpr(pattern, y)))

val1 <- as.Date(val,format=c("%Y-%m-%d","%d.%m.%Y"))
val2 <- format(val1,"%B %d, %Y")

y1 <- list()
for (i in 1:length(y)){
  y1[i] <- gsub(pattern,val2[i],y[i])
}
}

但是,当我仅输入:

x <- "to complete my homework that was due on 24.04.2017."

...它只返回 NA。我已将问题范围缩小到gsub哪里的替代品 value, “如果 NA,则结果中与匹配项对应的所有元素都将设置为 NA”。因此,由于仅输入最后一行时缺少第一个日期,因此仅返回 NA。

我怎样才能让它接受其中一个或两个日期?


第一种方法:

Using BASE R解决方案(不使用任何包):

pattern <- "\\d{2,4}[.-]\\d{2}[.-]\\d{2,4}"
rep <- c("On the evening of 2017-04-23, I was too tired","to complete my homework that was due on 24.04.2017.")


val <- unlist(regmatches(rep, gregexpr(pattern, rep)))

val1 <- as.Date(val,format=c("%Y-%m-%d","%d.%m.%Y"))
val2 <- format(val1,"%B %d, %Y")
val2
rep1 <- list()
for (i in 1:length(rep)){
rep1[i] <- gsub(pattern,val2[i],rep[i])
}

Answer:

do.call("c",rep1)

> do.call("c",rep1)                                                   
[1] "On the evening of April 23, 2017, I was too tired"      
[2] "to complete my homework that was due on April 24, 2017."
> 

第二种方法:

使用库stringr

library(stringr)
rep <- c("On the evening of 2017-04-23, I was too tired","to complete my homework that was due on 24.04.2017.")
val <- str_extract(rep,"\\d{2,4}[.-]\\d{2}[.-]\\d{2,4}")
val1 <- as.Date(val,format=c("%Y-%m-%d","%d.%m.%Y"))
val2 <- format(val1,"%B %d, %Y")
rep1 <- str_replace_all(rep,"\\d{2,4}[.-]\\d{2}[.-]\\d{2,4}",val2)
rep1

Answer:

> rep1
[1] "On the evening of April 23, 2017, I was too tired"      
[2] "to complete my homework that was due on April 24, 2017."
> 

编辑OP稍微改变了问题之后,解决方案更通用,但是假设月份始终位于中间,并且分隔符仅限于破折号(-)和点(.):

pattern <- "\\d{2,4}[.-]\\d{2}[.-]\\d{2,4}"
rep <- c("On the evening of 2017-04-23, I was too tired","to complete my homework that was due on 24.04.2017.")


val <- unlist(regmatches(rep, gregexpr(pattern, rep)))

year <- regmatches(val, gregexpr("\\d{4}", val))

month <- regmatches(val, gregexpr("(?<=[.-])\\d{1,2}(?=[.-])", val,perl=T))

date <- regmatches(val, gregexpr("(?<=[.-])\\d{2}$|^\\d{2}(?=[.-])", val,perl=T))
#Extracting year month and date , assuming month always falls in middle string

date1 <- paste0(year,"-",month,"-",date)
date1 <- as.Date(date1,"%Y-%m-%d")
val2 <- format(date1,"%B %d, %Y")

rep1 <- list()
for (i in 1:length(rep)){
  rep1[i] <- gsub(pattern,val2[i],rep[i])
}


do.call("c",rep1) 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将字符向量中的日期替换为特定格式 的相关文章

  • 可以明确声明包依赖项的版本吗?

    我倾向于对我编写的代码进行明确而不是隐含的描述 因此 在成功创建自己的包之后 我立即想到的下一件事是如何最好地确保代码的健壮性和可靠性 其中一部分与我的包所依赖的包有关 实际问题 在这方面 是否可以明确声明需要 期望哪个版本的包依赖项 我正
  • 将 JSON URL 转换为 R 数据帧

    我在将 JSON 文件 从 API 转换为 R 中的数据帧时遇到问题 例如 URL 我尝试了 S O 的一些不同建议 包括将json数据转换为R中的数据框 https stackoverflow com questions 28683769
  • R-了解 akima::interp 结果中的 NA 值

    我有以下数据框 ref dat k Intensity Slope 1 0 021467214 33 16 2 0 012444759 33 8 3 0 006079156 33 4 4 0 003792025 33 2 5 0 02276
  • 使用 R 的 flextable 包时,有没有办法将传递给 add_header_lines() 的字符串部分加粗

    我正在使用我喜欢的 flextable 包为 Word 文档创建几个表格 但是 我在将表格标题中的部分文本加粗时遇到了一些麻烦 例如 我希望标题为 Table 1 我的表格标题的其余部分 而不是 表 1 我的表格标题的其余部分 I 找到这个
  • R 中的发散积分可在 Wolfram 中求解

    我知道我以前问过同样的问题 但由于我是新来的 这个问题问得不好而且不可重现 因此我在这里尝试做得更好 如果我只编辑旧的 可能没有人会读它 我有一个想要积分的二重积分 ff lt function g t exp 16 g exp 8 t t
  • R:将 readRDS 应用于 .Rds 文件名的列表对象

    我有几个包含数据帧对象的 Rds 文件 我想对每个文件应用一个函数并将数据帧绑定到单个数据帧中 但是 当我尝试从文件名列表中读取多个 Rds 文件时 我收到错误 FUN X i 中的错误 从连接读取时出错 readRDS 不适用于列表吗 R
  • 错误:“rjags”的包或命名空间加载失败

    在终端的 conda 环境之一中 我能够成功安装包 rjags 但是 当我在该环境中运行 R 并运行库 rjags 时 出现以下错误 加载所需的包 coda 错误 rjags 的包或命名空间加载失败 rjags 的 loadNamespac
  • 在 R 中绘制对数正态概率密度

    我正在尝试在 R 中生成对数正态概率密度图 其中包含 3 个不同的均值对数和标准差对数 我尝试了以下方法 但我的图表太丑了 看起来一点也不好看 x lt seq 0 10 length 100 a lt dlnorm x meanlog 0
  • 当每个记录都是一个段落并且某些记录有 4 个字段而其他记录有 6 个字段时,如何将文本文件读入 R

    如何读取文本文件 其中每条记录都是一个段落 每个换行符表示单独的字段 复杂的是 有些记录有 4 行 有些记录有 6 行 当字段数量的差异为 1 时 DWin 解决了我的问题 但当字段数量差异为 2 时 一切都崩溃了 你可以有一个在这里看看他
  • 将 VLMC 拟合到很长的序列

    我正在尝试将 VLMC 拟合到最长序列为 296 个状态的数据集 我这样做如下所示 Load libraries library PST library RCurl library TraMineR Load and transform d
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 逻辑回归/二项式的 glmnet 误差

    当尝试将 glmnet 与 family binomial 配合以进行逻辑回归拟合时 出现此错误 gt data lt read csv DAFMM HE16 matrix csv header F gt x lt as data fram
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • 如何按 data.table 中的十分位数组计算统计数据

    我有一个 data table 想按组计算统计数据 R set seed 1 R DT data table a rnorm 100 b rnorm 100 这些组应该定义为 R quantile DT a probs seq 1 9 1
  • 比较 R 中的两个字符向量

    我有两个 ID 字符向量 我想比较这两个字符向量 特别是我对以下数字感兴趣 A和B各有多少个ID 有多少个ID在A中但不在B中 有多少个ID在B但不在A 我还想画维恩图 以下是一些可以尝试的基础知识 gt A c Dog Cat Mouse
  • 如何将此“for”循环转换为向量解

    这个问题与 将嵌入其他文本的长州名称转换为两个字母的州缩写 https stackoverflow com questions 25582518 convert long state names embedded with other te
  • 如何在R中同时对三个字段进行网络分析

    如何在 R 中同时对三个字段进行网络分析 下面是示例数据以及desired output在最后一栏中 df lt data frame stringsAsFactors FALSE id 1 c ABC ABC BCD CDE DEF EF
  • 使用 dplyr::filter 的整洁方式是什么?

    使用下面的函数调用foo c b 输出以内联方式显示 正确的写作方式是什么df gt filter x gt x 我已经包含了一个使用的示例mutate以整洁的风格与之对比filter foo lt function variables x
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY

随机推荐