我具有UNIX时间戳的以下数据框(mydf):
1543748345000
1543760946000
1543752164000
1543720144000
1543752713000
1543781064000
1543753688000
1543765145000
…
(n = 200,000)
我将日期转换为日期格式,使用:
mydf <- as.POSIXct(as.integer(as.numeric(as.character(mydf)) / 1000.0),origin='1970-01-01', tz="GMT")
这很好用,我可以得到日期和准确时间井井有条的数据:
2018-12-01 00:07:05
2018-12-01 00:09:04
2018-12-01 00:25:42
…
现在让我们说我想生成x分钟的数据块(例如30分钟),以计算我在x分钟的时间范围内观察到的观察次数,例如:
From | To | Count
2018-12-01 00:00:00 | 2018-12-01 00:30:00 | 3
2018-12-01 00:30:00 | 2018-12-01 01:00:00 | 6
2018-12-01 01:00:00 | 2018-12-01 01:30:00 | 5
…
同时,我的数据框中还有其他一些数字变量,我想在新的x-minutes-chunks-data-frame中获取均值。 (例如,前三个观察值在第一个块中(=一个观察值),在这里我想获得这三个观察值的每个变量的平均值)。
干杯:)
编辑:
mydf <- data.frame("content" = c(replicate(10,"Here is Text")),
"replies" = c(1,2,3,2,5,2,6,2,6,3),
"credits" = c(4,7,3,6,2,11,7,10,9,0),
"unix_timestamp" = c("2018-12-01 00:07:05 GMT", "2018-12-01 00:09:04 GMT", "2018-12-01 00:25:42 GMT", "2018-12-01 00:28:40 GMT",
"2018-12-01 01:09:11 GMT", "2018-12-01 02:19:05 GMT", "2018-12-01 03:29:06 GMT", "2018-12-01 04:06:30 GMT",
"2018-12-01 04:29:06 GMT", "2018-12-01 05:29:16 GMT"))
我的目标:
data.frame("count" = c(4,0),
"mean_replies" = c(2,0),
"mean_credits" = c(5,0),
"from" = c("2018-12-01 00:00:00 GMT","2018-12-01 00:30:00 GMT"),
"to" = c("2018-12-01 00:30:00 GMT", "2018-12-01 01:00:00 GMT"))
答案 0 :(得分:1)
关于您的第一个问题,我不知道(日期繁琐,时区更糟),在我看来,如果您建立了tz = "GMT"
,则应该为时区。
关于第二个问题,您可以使用data.table和cut()
轻松做到:
# load libraries
library(data.table)
# load data
dt <- fread("1543748345000
1543760946000
1543752164000
1543720144000
1543752713000
1543781064000
1543753688000
1543765145000")
# Convert dates to appropriate format
dt[, V1 := as.POSIXct(as.integer(as.numeric(as.character(V1)) / 1000.0),origin='1970-01-01', tz="GMT")]
# count occurrences by 30 minutes chuks:
dt[, .N,
by = cut(V1,
seq(as.POSIXct("2018-12-02", tz = "GMT"),
as.POSIXct("2018-12-03", tz = "GMT"),
by = "30 min"))]
这将导致:
cut N
1: 2018-12-02 10:30:00 1
2: 2018-12-02 14:00:00 1
3: 2018-12-02 12:00:00 3
4: 2018-12-02 03:00:00 1
5: 2018-12-02 20:00:00 1
6: 2018-12-02 15:30:00 1
########问题中已添加到地址修改过的数据中#######
cutVector <- seq(as.POSIXct("2018-12-01", tz = "GMT"),
as.POSIXct("2018-12-02", tz = "GMT"),
by = "30 min")
mydf[, .(mean_replies = mean(replies),
mean_credits = mean(credits),
count = .N),
by = cut(V1, cuVector)]
您仍然可能需要修改/调整变量名称,范围等。
仔细阅读?data.table
和?cut