长字符串日期到短日期R
我有一个日期格式如下的df长字符串日期到短日期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(
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