我是R新人。我的數據有三個屬性定義的600k對象:Id
,Date
和TimeOfCall
。R中的分級時間系列?
TimeofCall
有一個00:00:00
格式和範圍從00:00:00
到23:59:59
。
我想將TimeOfCall
屬性分成24個分檔,每個分檔代表小時位(第一個分檔00:00:00
至00:59:59
等)。
有人可以通過我如何做到這一點?我嘗試使用cut()
,但顯然我的格式不是數字。提前致謝!
我是R新人。我的數據有三個屬性定義的600k對象:Id
,Date
和TimeOfCall
。R中的分級時間系列?
TimeofCall
有一個00:00:00
格式和範圍從00:00:00
到23:59:59
。
我想將TimeOfCall
屬性分成24個分檔,每個分檔代表小時位(第一個分檔00:00:00
至00:59:59
等)。
有人可以通過我如何做到這一點?我嘗試使用cut()
,但顯然我的格式不是數字。提前致謝!
雖然你可以轉換成正式的時間表示,在這種情況下,它可能會更容易,只需使用substr
:
test <- c("00:00:01","02:07:01","22:30:15")
as.numeric(substr(test,1,2))
#[1] 0 2 22
使用POSIXct
時間來對付它也將工作,並且可能是方便的,如果您計劃進一步計算(時間差異等):
testtime <- as.POSIXct(test,format="%H:%M:%S")
#[1]"2013-12-09 00:00:01 EST" "2013-12-09 02:07:01 EST" "2013-12-09 22:30:15 EST"
as.numeric(format(testtime,"%H"))
#[1] 0 2 22
這個工作就像一個魅力,謝謝! 第二種方法非常好!我相信我會更頻繁地使用它! 快速的一個,如果我要從日期中提取一週中的幾天,我是否也可以使用POSIXct? – Palcente
@Palcente - 如果你已經有了一個Date變量(或者一個POSIXct/POSIXlt日期時間),你可以使用格式'format(datevar,「%w」)',其結果是0-6,星期天是0。 – thelatemail
如果我的日期如下,你能告訴我什麼是我的POSIXct格式:01-Jan-09 ...會格式=「%d-%b-%y」? – Palcente
您可以使用cut.POsixlt
函數。但是你應該強制你的數據到一個有效的時間對象。這裏我使用lubridate
得心應手的hms
。和strftime
獲取時間格式。
library(lubridate)
x <- c("09:10:01", "08:10:02", "08:20:02","06:10:03 ", "Collided at 9:20:04 pm")
x.h <- strftime(cut(as.POSIXct(hms(x),origin=Sys.Date()),'hours'),
format='%H:%M:%S')
data.frame(x,x.h)
x x.h
1 09:10:01 10:00:00
2 08:10:02 09:00:00
3 08:20:02 09:00:00
4 06:10:03 07:00:00
5 Collided at 9:20:04 pm 22:00:00
【如何使一個偉大的[R重複的例子?(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) – zero323
你想添加一個bin列到你的data.frame?或者你有不同的數據結構? – Milktrader
你好Milktrader, 這是data.frame,是的,這將工作。 – Palcente