[英]Aggregate data on daily intervals in R
我的數據集由3列(時間,價格和數量)中的幾個觀察值組成,如下所示,
time price volume
2017-11-15 9:35:11 301.1 1.1
2017-11-15 9:35:09 300.9 3.0
2017-11-15 9:35:07 300.8 1.4
2017-11-15 9:35:06 300.9 0.1
2017-11-15 9:35:01 301.0 0.6
我想首先將數據按24h的周期進行裁剪,為每個24h的周期添加卷,並在匯總數據時獲得。
我已經嘗試執行以下操作(代碼上的初始數據集稱為“ mydf”),
##sum the volume over periods of 24h
mydf_volume_24h <- data.frame (volume = tapply (cbind (mydf$volume), list (cut (mydf$time, breaks="24 hours")), sum))
##bind the previous df with the prices for each time label
mydf_24h <- setNames (cbind (rownames (mydf_volume_24h), mydf_volume_24h, row.names = NULL), c("time", "volume"))
mydf <- mydf %>%
select(-volume)
mydf_24h <- merge (mydf, mydf_volume_24h, by = "time")
除了(可能)不是最佳/有效方式之外,此代碼的問題不會出現,因為該代碼的第一部分為我提供了24小時內的體積總和,但用時間23標記了每個總和: 00:00,這並不總是存在於我的數據集中。
我的意圖是減少24小時的時間段,但給我一個最接近24小時時間段的(實際)觀察時間。 有什么辦法嗎?
這可能不完全是您想要的,但是根據您的描述,我收集到了您想要對每一天的總量進行匯總,以及獲取每一天的最長時間。 如果確實如此,則下面的方法應該可以獲取匯總數據框:
library(dplyr)
library(stringr)
library(lubridate)
df <- tibble(time = c(
"2017-11-15 9:35:11",
"2017-11-15 9:35:09",
"2017-11-15 9:35:07",
"2017-11-15 9:35:06",
"2017-11-15 9:35:01",
"2017-11-16 9:36:12",
"2017-11-16 9:35:09",
"2017-11-16 9:35:07",
"2017-11-16 9:35:06",
"2017-11-16 9:35:01"
),
price = c(301.1, 300.9, 300.8, 300.9, 301.0,
302, 303, 304, 305, 306),
volume = c(1.1, 3.0, 1.4, 0.1, 0.6,
1.4, 3.4, 1.5, 0.5, 0.6)
)
df %>% mutate(time = ymd_hms(time)) %>%
mutate(day = str_extract(time, "^\\S+")) %>%
group_by(day) %>%
summarize(volume = sum(volume), maxTime = max(time))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.