长字符串日期到短日期R

长字符串日期到短日期R,r,datetime,R,Datetime,我有一个日期格式如下的df Date Year <chr> <dbl> Sunday, Jul 27 2008 Tuesday, Jul 29 2008 Wednesday, July 31 (1) 2008 Wednesday, July 31 (2) 2008 使用base R,您可以执行以下操作: dat <- data.frame(

我有一个日期格式如下的df

Date                     Year
<chr>                    <dbl>
Sunday, Jul 27           2008
Tuesday, Jul 29          2008
Wednesday, July 31 (1)   2008
Wednesday, July 31 (2)   2008

使用base R,您可以执行以下操作:

dat <- data.frame(
  Date = c("Sunday, Jul 27" ,"Tuesday, Jul 29", "Wednesday, July 31", "Wednesday, July 31"),
  Year = rep(2008, 4),
  stringsAsFactors = FALSE
)


dts <- as.POSIXlt(paste(dat$Year, dat$Date), format = "%Y %A, %B %d")

使用base R,您可以执行以下操作:

dat <- data.frame(
  Date = c("Sunday, Jul 27" ,"Tuesday, Jul 29", "Wednesday, July 31", "Wednesday, July 31"),
  Year = rep(2008, 4),
  stringsAsFactors = FALSE
)


dts <- as.POSIXlt(paste(dat$Year, dat$Date), format = "%Y %A, %B %d")
库(dplyr)
图书馆(lubridate)
dat=数据帧(日期=c('7月27日星期日','7月29日星期二','7月29日星期三
31(1)‘7月31日星期三(2)’,年份=代表(2008,4))
dat%>%
变异(date=gsub(“\\s*\\([^\\)]+\\)”,“”,as.character(date)),
date=parse_date_time(date,'A,b!d')->dat1
年份(dat1$date)
library(dplyr)
图书馆(lubridate)
dat=数据帧(日期=c('7月27日星期日','7月29日星期二','7月29日星期三
31(1)‘7月31日星期三(2)’,年份=代表(2008,4))
dat%>%
变异(date=gsub(“\\s*\\([^\\)]+\\)”,“”,as.character(date)),
date=parse_date_time(date,'A,b!d')->dat1

年份(dat1$date)如果你要进行大量的日期操作,我会看看lubridate包,它有很多灵活性。你应该发布类似结构的dput()版本(可能是一个TIBLE,并且有点难以准确地重新创建)。如果你要进行大量的日期操作,我会看看lubridate软件包,它具有很大的灵活性。你应该发布这样的结构的dput()版本(它可能是一个TIBLE,并且有点难以准确地重新创建)。请将你的
的加载量减少到只有那些实际需要的软件包
tidyverse
是一个方便的超级软件包,可以引入许多其他在这里不需要的软件包。在这种情况下,我认为应该是
dplyr
(和
lubridate
)。有趣的是,您选择了
gsub
-从他的问题中删除注释。我没有想到要这么做,很好地保持了问题的完整性/完美再现性。我没有想到只使用相关的软件包,因为tidyverse已经超越了我对任何单个软件包的使用,谢谢。我已经看到了很多。该评论与缩进和变量命名一起被视为“个人偏好”,但它也与“最小/可验证示例”的主题相一致*耸耸肩*这个解决方案对我很有效。感谢您的帮助请将您的
加载量减少到实际需要的软件包
tidyverse
是一个方便的超级软件包,可以引入许多其他在这里不需要的软件包。在这种情况下,我认为应该是
dplyr
(和
lubridate
)。有趣的是,您选择了
gsub
-从他的问题中删除注释。我没有想到要这么做,很好地保持了问题的完整性/完美再现性。我没有想到只使用相关的软件包,因为tidyverse已经超越了我对任何单个软件包的使用,谢谢。我已经看到了很多。该评论与缩进和变量命名一起被视为“个人偏好”,但它也与“最小/可验证示例”的主题相一致*耸耸肩*这个解决方案对我很有效。感谢您的帮助我最终将您的代码与上面的lubridate解决方案结合起来,进行简单的月、日、周计算。谢谢你的帮助!最后,我将您的代码与上面的lubridate解决方案结合起来,进行简单的月、日、周计算。谢谢你的帮助!
dat$Month = 1 + dts$mon # months are 0-based in POSIXlt
dat$Day = dts$mday
dat$Day_of_Week = weekdays(dts)
dat
#                 Date Year Month Day Day_of_Week
# 1     Sunday, Jul 27 2008     7  27      Sunday
# 2    Tuesday, Jul 29 2008     7  29     Tuesday
# 3 Wednesday, July 31 2008     7  31    Thursday
# 4 Wednesday, July 31 2008     7  31    Thursday
library(dplyr)
library(lubridate)
dat = data_frame(date = c('Sunday, Jul 27','Tuesday, Jul 29', 'Wednesday, July 
31 (1)','Wednesday, July 31 (2)'), year=rep(2008,4))  

dat %>% 
    mutate(date = gsub("\\s*\\([^\\)]+\\)","",as.character(date)),
           date = parse_date_time(date,'A, b! d ')) -> dat1
           year(dat1$date)  <-  dat1$year

# A tibble: 4 × 2
        date  year
      <dttm> <dbl>
1 2008-07-27  2008
2 2008-07-29  2008
3 2008-07-31  2008
4 2008-07-31  2008