我目前有一個資料框架,其中有一列Start.Time(從一個*.csv檔案匯入),格式是24小時格式(例如,20:00:00等于晚上8點)。我的目標是捕捉具有不同間隔的開始時間(例如,9:00:00和10:00:00之間)的觀察結果,這些觀察結果也符合其他標準。然而,R對這個 "字符 "變數的排序方式似乎與我們一天的作業方式不一致(例如,14:00:00被認為比9:00:00的值低)。
例如,下面是一行按預期作業的代碼,我正在捕獲兩個不同的小路段的觀察結果,它們的開始時間在8:00:00和9:00:00之間。
RLLtoMist8. 9<-sum((dataset1$Trail. Segment==52|dataset1$Trail. Segment==55) &/span>
(dataset1$Start. 時間>="8:00" & dataset1$開始。 時間< "9:00"),
na.rm=TRUE)
RLLtoMist8.9
但是,下面這段代碼并沒有按照預期的那樣作業,因為R "重視 "9:00:00大于10:00:00.
。RLLtoMist9.10 <-
sum((dataset1$Trail。 Segment==52|dataset1$Trail. Segment==55) &/span>
(dataset1$Start. 時間>="9:00:00 AM" & dataset1$開始。 時間< "10:00:00 AM"),
na.rm=TRUE)
uj5u.com熱心網友回復:
使用 data.table 庫:
# convert to data table
dataset1<-data.table(dataset1)
#格式為日期格式而不是字符。
dataset1[, Start.Time := as.POSIXct(Start. 時間, format="%H:%M:%S")】
#現在進行過濾。
dataset1[between(Start.Time, as. POSIXct("09:00:00",格式="%H: %M:%S"),作為。 POSIXct("10:00:00",格式="%H: %M:%S")) & (Trail. 段==52 |Trail. 段==55)]
uj5u.com熱心網友回復:
當然,字符型別被排序后,"14:00 "小于 "9:00 "是事實。然而,R有一個日期時間類,一旦字符表示法被決議,它就會對時間進行正確排序。
a <- as. POSIXct("14: 00", format="%H:%M")
b <-作為。 POSIXct("8: 00", format="%H:%M")
# test
> a < b
[1] FALSE
你將能夠用以下方法轉換整個列:
你將能夠用以下方法轉換整個列:
dataset1$Start. 時間<- as.POSIXct(dataset1$開始。 時間, format="%H:%M")
a和b的日期是轉換時的系統日期。有一些包,例如chron,讓你只使用時間,但POSIXt物件必然有日期和時間。參見?DateTimeClasses。lubridate包也有一個 "時間間隔 "類,并且在base-R中存在一個difftime函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/311887.html
標籤:
