首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将文本转换为R中的特定日期格式

将文本转换为R中的特定日期格式
EN

Stack Overflow用户
提问于 2015-10-06 18:52:42
回答 2查看 110关注 0票数 0

我有以下字符(示例):

代码语言:javascript
运行
复制
>trial
[1] "9-5"  "7-5"  "13-3" "17-6"

我希望将它们转换为日期格式的(如果可能的话),并变成如下所示:

代码语言:javascript
运行
复制
>trial
[1] Friday 9:00  Friday 7:00  Wednesday 13:00  Saturday 17:00

我使用以下代码,这不是期望的结果:

代码语言:javascript
运行
复制
>strptime(trial,format="%k-%w")
[1] "2015-10-06 09:00:00 CEST" "2015-10-06 07:00:00 CEST"
[3] "2015-10-06 13:00:00 CEST" "2015-10-06 17:00:00 CEST"

我的意思是我想要平日和小时的日期格式。怎么做呢?

EN

回答 2

Stack Overflow用户

发布于 2015-10-06 20:23:59

以下是我可能做的事:

代码语言:javascript
运行
复制
library(data.table) # for wday & tstrsplit

a_wk  <- Sys.Date()+1:7
wdays <- weekdays(a_wk)[ order(wday(a_wk)) ]
# "Sunday"    "Monday"    "Tuesday"   "Wednesday" "Thursday"  "Friday"    "Saturday"

data.table(trial)[,tstrsplit(trial, "-", type.convert=TRUE)][, 
  paste0(wdays[V2 + 1], " ", V1, ":00")
]
# "Friday 9:00"     "Friday 7:00"     "Wednesday 13:00" "Saturday 17:00"

之所以需要+ 1,是因为wday函数将星期日作为第一天;而OP使用的是星期一。

注释.它可以写得更简洁(只调用trial一次)

代码语言:javascript
运行
复制
setDT(tstrsplit(trial, "-", type.convert=TRUE))[, 
  paste0(wdays[V2 + 1], " ", V1, ":00")
]

通过查看中间结果,您可以看到这是如何工作的:

代码语言:javascript
运行
复制
data.table(trial)[,tstrsplit(trial, "-", type.convert=TRUE)]
#    V1 V2
# 1:  9  5
# 2:  7  5
# 3: 13  3
# 4: 17  6
票数 2
EN

Stack Overflow用户

发布于 2015-10-06 19:44:55

尝试:

代码语言:javascript
运行
复制
paste(weekdays((as.Date("1970-01-01")+4)+0:7)[as.numeric(sub(".*-(\\d+)", "\\1", trial))], sub("(\\d+).*", "\\1:00", trial))
[1] "Friday 9:00"     "Friday 7:00"     "Wednesday 13:00"
[4] "Saturday 17:00"

或者,为了解释正在发生的事情,我将在中间步骤中展示它:

代码语言:javascript
运行
复制
#1. starting vector
trial <- c("9-5",  "7-5",  "13-3", "17-6")

#2. get the hour and add ":00" to the values
hr <- sub("(\\d+).*", "\\1:00", trial)

#3. get the day of the week as a number
d <- as.numeric(sub(".*-(\\d+)", "\\1", trial))

#4. pick a week with a Monday date that you know and add 6 days (I use The first Monday after the origin). Subset with 'd'
day_vector <- weekdays((as.Date("1970-01-01")+4)+0:7)[d]

#5. paste day and hour together
paste(day_vector, hr)

[1] "Friday 9:00"     "Friday 7:00"     "Wednesday 13:00"
[4] "Saturday 17:00" 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32977491

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档