2014-06-16 4 views
1

데이터 프레임에 POSIXlt 시간대가 있습니다.이 관찰 결과 (이 경우, 자전거 타기)가 하루에 얼마나 많이 발생했는지 알기 위해 노력하고 있습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?하루에 POSIXlt 계산하기

날짜는 다음과 같다 :

> rides$start.fmtd[1:25] 
[1] "2014-01-01 00:06:00" "2014-01-01 00:11:00" "2014-01-01 00:12:00" 
[4] "2014-01-01 00:14:00" "2014-01-01 00:15:00" "2014-01-01 00:16:00" 
[7] "2014-01-01 00:16:00" "2014-01-01 00:19:00" "2014-01-01 00:20:00" 
[10] "2014-01-01 00:20:00" 

dput(head())

이 나에게주는이 :

> dput(head(rides$start.fmtd)) 
structure(list(sec = c(0, 0, 0, 0, 0, 0), min = c(6L, 11L, 12L, 
14L, 15L, 16L), hour = c(0L, 0L, 0L, 0L, 0L, 0L), mday = c(1L, 
1L, 1L, 1L, 1L, 1L), mon = c(0L, 0L, 0L, 0L, 0L, 0L), year = c(114L, 
114L, 114L, 114L, 114L, 114L), wday = c(3L, 3L, 3L, 3L, 3L, 3L 
), yday = c(0L, 0L, 0L, 0L, 0L, 0L), isdst = c(0L, 0L, 0L, 0L, 
0L, 0L)), .Names = c("sec", "min", "hour", "mday", "mon", "year", 
"wday", "yday", "isdst"), class = c("POSIXlt", "POSIXt")) 

이 특정 프레임은 약 30 만 의식을 (그것은에서 촬영마다 자전거를 타고 들어있는 국회 의사당 bikeshare 데이터 세트,없는거야 시스템, 분기 별 패키지).

+2

당신은'dput (머리 (yourDataFrame))'의 출력을 게시하여 데이터의 샘플을 제공 할 수 있습니까? 'table (as.Date (yourDataFrame $ posixLtVariable))'가 작동해야합니까? –

+0

'table (as.date (frame $ column))'이 작동합니다! 하지만 프레임에 약 30 만 건의 관측이 있었기 때문에 합리적인 양의 데이터를 뱉어 내기 위해'dput() '을 사용할 수 없습니다. –

+0

@JakeBurkhead가 대답합니다. 'as.Date()'는 테이블 라벨로 날짜를 유지하는 반면,'frame $ yday'는 쉽게 그렇게 할 수 없습니다. –

답변

2
dates <- as.POSIXlt(runif(10, 0, 60 * 60 * 24 * 7), origin = Sys.Date()) 
dates 
## [1] "2014-06-16 03:36:13 PDT" "2014-06-15 22:39:41 PDT" 
## [3] "2014-06-19 12:25:11 PDT" "2014-06-17 09:31:45 PDT" 
## [5] "2014-06-20 02:20:00 PDT" "2014-06-18 04:36:48 PDT" 
## [7] "2014-06-19 17:33:35 PDT" "2014-06-21 15:38:24 PDT" 
## [9] "2014-06-17 08:50:45 PDT" "2014-06-20 03:36:38 PDT" 

class(dates) 
## [1] "POSIXlt" "POSIXt" 

table(as.Date(dates)) 
## 2014-06-15 2014-06-16 2014-06-17 2014-06-18 2014-06-19 2014-06-20 2014-06-21 
##   1   1   2   1   2   2   1 
+0

아! 내가 배운 또 다른 사실은'class()', * not *'typeof()'만이 이러합니다. 'typeof()'는 단지 이것이 목록이라고 말합니다 ~ –

1

날짜와 시간이있는 값이있는 경우 날짜 형식을 지정하여 해당 값에 대해 table()을 사용하여 개수를 얻을 수 있습니다.

#sample data 
set.seed(15) 
randomdates <- structure(runif(30, 1357016400, 1359608400), 
    class=c("POSIXct", "POSIXt"), tzone="") 

지금이의 유일한 단점은 해당 테이블()는 날짜

table(strftime(randomdates, "%Y-%m-%d")) 

당 값을 계산 문자 벡터에 날짜를집니다. 당신은

tbl<-table(strftime(randomdates, "%Y-%m-%d")) 
as.POSIXct(names(tbl)) 
1

POSIXltyday 속성을 가지고 그들을 다시 변환 할 수 있습니다, 당신은 aggregate 또는 by 또는 table 또는를 사용하여 계산을 수행하려면이 옵션을 사용할 수 있습니다.

예를 들어 d 데이터 프레임에 count에 하루의 준수 횟수가 있고 date 열이 있다고 가정합니다. 당신은 또한을 초과하는 승수로 (올해 포함 할 수 있습니다 더 1 년 이상에 걸쳐있는 경우

aggregate(count ~ date$yday, data=d, FUN=sum) 

(또는 안전을 위해) : 데이터가 1 ​​년 이상에 걸쳐하지 않는 경우, yday 혼자 사용할 수 있습니다 366) :

aggregate(count ~ I(1000*date$year + date$yday), data=d, FUN=sum) 
+0

그러나 실제로 data.frame에 POSIXlt 값이 들어있을 가능성이 있습니까? data.frame은 종종이를 암시 적으로 POSIXct로 변환합니다. – MrFlick

+3

질문에 예를 들지 않으면, 나는 그의 말에 따라 잡아야한다. –

+0

죄송합니다. 위 날짜의 예를 추가했습니다. 나는 그것들이 출력 될 때 그것들이'POSIXlt'인지'POSIXct'인지를 알 수 없다. –