2015-11-15 66 views
2

我有這種形式的信息保存在變量「fechas」的R - 由第一空間分割數據幀只

"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模擬時間的小時?

+0

字符串的長度都一樣嗎? – polka

+0

是的,他們有相同的長度@polka - 整個結果,會像「10:59:21 PM」 – Vesper

回答

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) 

或者使用正則表達式來刪除你不」的一部分t需要:

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

或者因爲長度是固定的:'substring(x,12)' – Henrik

+0

這是更好的做法。 – polka

+1

@polka - 「更好」有點主觀。這種情況很簡單,但如果你想從12小時切換到24小時或者提取日期和月份縮寫等,''格式化'日期可以非常方便'as.POSIXct'會也優雅地處理像'x2 < - c(「9/3/2013 10:59」,「09/03/2013 10:59」)' – thelatemail

2

然後,只需子集串。

substr(c, 12,22) 

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

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