R - 仅按第一个空格分割数据帧

时间:2015-11-15 23:23:09

标签: r

我已将这种形式的信息保存在变量'fechas'

"09/03/2013 10:59:21 PM" 
"09/03/2013 10:58:19 PM" 
"09/03/2013 10:57:06 PM"
"09/03/2013 10:55:31 PM" 
"09/03/2013 10:52:34 PM" 
"09/03/2013 10:51:10 PM"
"09/03/2013 10:45:06 PM" 
"09/03/2013 10:18:53 PM" 
"09/03/2013 10:10:47 PM"
"09/03/2013 10:00:28 PM" 
"09/03/2013 09:57:42 PM" 
"09/03/2013 09:32:32 PM"

我能够分开日期,但我无法让时间与AM或PM相对应。

我试过了。

horas <- strsplit(fechas,"2013 ")

但他们也分配了2014年和2015年。 我怎样才能获得具有相应AM / PM模拟时间的小时?

2 个答案:

答案 0 :(得分:3)

转换为日期/时间,然后根据需要返回format

format(as.POSIXct(x, format="%d/%m/%Y %I:%M:%S %p"), "%I:%M:%S %p")
# [1] "10:59:21 PM" "10:58:19 PM" "10:57:06 PM" "10:55:31 PM" "10:52:34 PM" "10:51:10 PM"
# [7] "10:45:06 PM" "10:18:53 PM" "10:10:47 PM" "10:00:28 PM" "09:57:42 PM" "09:32:32 PM"

或使用?regex提取您需要的部分:

sub("^.+ (\\d{2}:\\d{2}:\\d{2} (A|P)M)", "\\1", x)
#or:
sub(".+/\\d{4} (.+)", "\\1", x)

或使用正则表达式删除不需要的部分:

sub(".+/\\d{4} ", "", x)

或者在代表四年数字的/YYYY上拆分:

strsplit(x, "(?<=/\\d{4}) ", perl=TRUE)
#[[1]]
#[1] "09/03/2013"  "10:59:21 PM"
#
#[[2]]
#[1] "09/03/2013"  "10:58:19 PM"
# ...

或者@Henrik指出,对于这个简单的情况,你可以使用substring从第12个字符开始抓取所有内容:

substring(x,12)

答案 1 :(得分:2)

然后只是对字符串进行子集化。

substr(c, 12,22)

或者如果您需要返回值列表。

newList<-sapply(ListOfTimes, substr, 12,22)