【问题标题】:How to modify date values?如何修改日期值?
【发布时间】:2019-03-06 09:41:19
【问题描述】:

如何修改原始日期值。例如。

> DF2
  Date     
1 11012018  
2 7312014  
3 6102015
4 10202017  

将带有“/”的日期值放入修改后的日期

> DF2
  Date     
1 11/01/2018  
2 7/31/2014  
3 6/10/2015
4 10/20/2017 

【问题讨论】:

标签: r date


【解决方案1】:

lubridate 用于所有与日期和时间相关的任务

> lubridate::mdy(c("11012018", "7/31/2014"))
[1] "2018-11-01" "2014-07-31"

如果需要,您也可以format它:

format(lubridate::mdy(c("11012018", "7/31/2014")), "%m/%d/%Y")
[1] "11/01/2018" "07/31/2014"

假设:您的日期采用月-日-年格式。否则你可以使用其他lubridate函数

【讨论】:

  • 尝试下一个条目dmy("7312014")
  • @RonakShah 已更正
  • OP 输入为7312014 并希望输出为7/31/2014。您已将输入输入为7/31/2014
  • 检查他们的预期输出,7/31/2014,他们只是想提出斜杠作为分隔符,不清楚他们是否要在日期类中。
【解决方案2】:

我们也可以使用(假设您只需要添加一个新的分隔符。无论如何,您可以转换回日期时间类型):

new<-gsub("([0-9]{,2})([0-9]{2})([0-9]{4})","\\1 \\2 \\3",df$Date)
gsub(" ","/",new)
#[1] "11/01/2018" "7/31/2014"  "6/10/2015"  "10/20/2017" 

编辑: 更一般地,正如@jay.sf 所建议的那样,

test4<-gsub("(^[0-1]?\\d)([0-3]?\\d)(\\d{4}$)","\\1 \\2 \\3",df$Date)
gsub(" ","/",test4)
#[1] "11/01/2018" "7/31/2014"  "6/10/2015"  "10/20/2017"

这是为了说明以下日期格式:

test3<-c("11012018", "1112015", "7312014", "7312014", "10202017", "772007", "772007", 
         "7072007")

【讨论】:

  • 很好,您如何将其概括为例如772017?
  • @jay.sf 有趣!也许我们可以像这样单独做:test&lt;-"772017"; test1&lt;-gsub("([0-9]{,2})([0-9]{,1})([0-9]{4})","\\1 \\2 \\3",test)我会看看我是否可以写一个更通用的解决方案。
  • 我支持。试试这个正则表达式 "(^[0-1]?\\d)([0-3]?\\d)(\\d{4}$)" 并在 c(11012018, 1112015, 7312014, 7312014, 10202017, 772007, 772007, 7072007) 上测试它。
  • @jay.sf 添加到答案中。谢谢!
  • 也适用于"0772007",我的数字代码有点失败
【解决方案3】:

一种可能的解决方案是:

df <- transform(df, V1 = as.Date(as.character(V1), "%d%m%Y"))

另外一个可以转换成所需mm/dd/yyyy格式的如下:

df <- data.frame(lapply(df, function(x) as.Date(as.character(x), "%m%d%Y")))

这两种解决方案都是通过基础 R 包实现的。

【讨论】:

  • 月-日-年格式,以第二行为例:"7/31/2014"
  • 如果这是他们想要的答案,一切都很好,但这是一个重复的帖子。检查他们的预期输出,7/31/2014,他们只是想提出斜杠作为分隔符,不清楚他们是否想要在日期类中。
  • 也许我很困惑,数据显然看起来是数字或整数。很高兴删除我的答案,如果不是这样的话!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
相关资源
最近更新 更多