2016-08-05 21 views
0

在R我有一個數據框data如何在一串時間子集

head (data) gives 
ID sign_in 
21 23:50:21 
12 10:11:38 
... 

包含ID和該ID的登錄時間。兩列都是字符串(或字符)。 假設我想要一個data的子集,它只包含從10 o'clcok到11點的時間間隔中的ID。

這是我如何試圖解決這個問題:

data_new = subset(data, data[,2] %in% as.character(10:00:00) : as.character(11:00:00)) 

但R已適時提供一個錯誤消息說錯誤:恆

我怎樣才能解決這個意外?

+1

你是怎麼與R期待'as.character(10:00做: 00):as.character(11:00:00)'? R解析器從內到外進行解析。首先,它試圖解析'10:00:00',但':'只能處理'10:0',然後,這個向量被轉換爲字符,與第二個向量相同。然後,你試着在兩個字符向量上運行':',但':'函數只能接受標量值等等。你應該真的試着將你的代碼分成幾部分:'10:00:00'和'as'。字符(10:00:00)'等。無論如何,嘗試'library(data.table); as.ITime(「23:50:21」)%(as.ITime(「10:00:00」):as.ITime(「11:00:00」)) –

回答

0

您可以通過字符列轉換爲"POSIXct" "POSIXt"格式,

df$sign_in <- as.POSIXct(df$sign_in,format="%H:%M:%S") 

,然後子集,

df[df$sign_in > as.POSIXct("10:00:00", format="%H:%M:%S") & 
    df$sign_in < as.POSIXct("11:00:00", format="%H:%M:%S"), ]