使用非标准格式格式化日期

时间:2017-07-24 12:52:41

标签: r date formatting timestamp

我对这个网站比较新,所以请原谅我,如果我的问题对你们来说有点模糊。我也意识到这个主题有很多线索,但我觉得它们没有特别回答我的问题,因为它们几乎都是关于将yy / mm / dd改为dd / mm / yy,反之亦然。

总之我想要什么?我希望我目前的格式只改为一年。

我的列中包含此格式的日期。

31OCT2016:23:52:00.000

我在许多主题中都看到过你可以使用格式命令,但它们就是这样的;

dates <- c("05/27/84", "07/07/05")

我有超过100,000个观察结果因此无法手动完成。 所以我试过了;

mydata$dates <- format(as.Date(mydata$dates), "%Y")

但那没用。我在这个网站上看到了正确的值

http://www.statmethods.net/input/dates.html

但它没有说明如何摆脱小时分钟和秒钟。

那么最简单的方法是将它全部剥离到一年只有一年?

1 个答案:

答案 0 :(得分:1)

Function something(inString As String) As String Dim lastSlash As Integer Dim firstPart As String, lastPart As String lastSlash = Len(inString) - InStr(1, StrReverse(inString), "/") firstPart = Mid(inString, 1, lastSlash) lastPart = Mid(inString, lastSlash + 2, 9999) something = firstPart & "/" & Replace(firstPart, "/", "_") & "_" & lastPart & "_1.jpg" End Function 是你的朋友。确切地说,函数Lubridate

我将生成一些样本数据,其格式与您的示例相同,因此我的代码可以重现。不要太担心。出于您的目的,您可以直接跳转到转换部分。

dmy_hms

所以基本上变量#------------------------------------------------------------------------------------------ #This code block is entirely for generating reproducible sample data d <- sample(1:27,10,T) mon <- toupper(sample(month.abb,10,T)) y <- sample(2000:2017,10,T) h <- sample(0:23,10,T) min <- sample(0:59,10,T) s <- sample(0:59,10,T) #load package library(lubridate) dts <- sprintf('%02d%s%s:%s:%s:%s.000',d,mon,y,h,min,s) > dts [1] "01JAN2012:12:6:53.000" "01NOV2010:0:19:47.000" "03SEP2000:9:45:3.000" "25NOV2009:21:39:57.000" "08DEC2015:19:27:36.000" [6] "23MAR2009:13:39:40.000" "03JUN2010:14:54:50.000" "03APR2002:6:34:45.000" "19NOV2012:5:17:29.000" "02FEB2003:0:3:59.000" #------------------------------------------------------------------------------------------ 是你想要转换的日期的列:

dts

然后为了获得这些年份,您可以使用#conversion > dmy_hms(dts) [1] "2012-01-01 12:06:53 UTC" "2010-11-01 00:19:47 UTC" "2000-09-03 09:45:03 UTC" "2009-11-25 21:39:57 UTC" [5] "2015-12-08 19:27:36 UTC" "2009-03-23 13:39:40 UTC" "2010-06-03 14:54:50 UTC" "2002-04-03 06:34:45 UTC" [9] "2012-11-19 05:17:29 UTC" "2003-02-02 00:03:59 UTC" 函数:

year

因此,假设您想要在> year(dmy_hms(dts)) [1] 2012 2010 2000 2009 2015 2009 2010 2002 2012 2003 内执行所有操作,您的代码可能如下所示:

data.frame

这是一个带有一些变量的数据框和带有日期的列。

# example dataframe
dframe <- data.frame(variable=c('A','B','C'),dates=sample(dts,3))

因此,要转换日期,我们只需执行> dframe variable dates 1 A 15JAN2000:0:37:6.000 2 B 13DEC2016:8:34:28.000 3 C 18AUG2005:2:27:16.000

即可

如果我们再次查看dframe$dates <- year(dmy_hms(dframe$dates)),我们可以看到转化成功:

dframe