1

データ フレームに POSIXlt 時間のチャンクがあり、これらの遵守事項 (この場合は自転車に乗ること) が 1 日に何回発生するかを確認しようとしています。それを行う最善の方法は何ですか?

日付は次のようになります。

> 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"))

この特定のフレームには、約 300,000 の観測があります (これは、システムで取得されたすべての自転車乗車が含まれ、四半期ごとにパッケージ化されたキャピトル バイクシェア データセットです)。

4

3 に答える 3

2

POSIXltには属性があり、これを使用して、またはまたはそのようなydayものを使用してカウントを行うことができます。aggregatebytable

たとえばcount、 data framedに columnの 1 日の観測回数があるとしますdate。データが 1 年を超えない場合は、次のものをyday単独で使用できます。

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

1 年以上にわたる場合 (または念のため)、その年を含めることもできます (乗数は 366 を超えます)。

aggregate(count ~ I(1000*date$year + date$yday), data=d, FUN=sum)
于 2014-06-16T02:31:57.003 に答える
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
于 2014-06-16T06:22:41.707 に答える
1

日付と時刻を含む値がある場合は、日付だけを含むように書式設定し、それらの値に対して table() を使用してカウントを取得できます。

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

日付ごとに値をカウントするようになりました

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

これの唯一の欠点は、 table() が日付を文字ベクトルに変換することです。あなたはそれらを元に戻すことができます

tbl<-table(strftime(randomdates, "%Y-%m-%d"))
as.POSIXct(names(tbl))
于 2014-06-16T02:29:27.077 に答える