R,dplyr包,获取每天的收盘价

R, dplyr package, get a closing value for each day

我有一个月的以下数据 (df):

        时间戳符号边尺寸价格
1: 2021-01-01 00:00:01 XBTUSD 买入 10000 28951.0
2: 2021-01-01 00:00:05 XBTUSD 卖出 1 28950.5
3: 2021-01-01 00:00:06 XBTUSD 卖出 1 28950.5
4: 2021-01-01 00:00:06 XBTUSD 卖出 1 28950.5
5: 2021-01-01 00:00:06 XBTUSD 卖出 1 28950.5
6: 2021-01-01 00:00:07 XBTUSD 卖出 1 28950.5
7:……………………

我想提取每个交易日的收盘价。我使用以下代码:

cl_price <- df %>% mutate(day = day(timestamp)) %>% 
      group_by(day) %>% summarise(closing = last(price))

但是,它并没有给出每一天的收盘价向量,而是只给出了一个对应于该月最后一天的收盘价。这是输出:

closing
1   33101

如何修改上面的代码,让我收到一个月内每个交易日的收盘价向量,而不仅仅是最后一个? 谢谢!

示例数据

structure(list(timestamp = c("2021-01-01 00:00:01", "2021-01-01 00:00:05", 
"2021-01-01 00:00:06", "2021-01-01 00:00:06", "2021-01-01 00:00:06", 
"2021-01-01 00:00:07"), symbol = c("XBTUSD", "XBTUSD", "XBTUSD", 
"XBTUSD", "XBTUSD", "XBTUSD"), side = c("Buy", "Sell", "Sell", 
"Sell", "Sell", "Sell"), size = c(10000, 1, 1, 1, 1, 1), price = c(28951, 
28950.5, 28950.5, 28950.5, 28950.5, 28950.5)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))

我认为您可以使用以下解决方案。我还认为可能有一个更简洁的解决方案,但对您来说它可以解决问题:

library(dplyr)
library(lubridate)

df %>%
  mutate(timestamp = ymd_hms(timestamp)) %>%
  mutate(year = year(timestamp), 
         month = month(timestamp), 
         day = day(timestamp)) %>% 
  group_by(year, month, day) %>%
  arrange(year, month, day) %>%
  slice_tail() %>%
  pull(price)

[1] 28950.5

数据

structure(list(timestamp = c("2021-01-01 00:00:01", "2021-01-01 00:00:05", 
"2021-01-01 00:00:06", "2021-01-01 00:00:06", "2021-01-01 00:00:06", 
"2021-01-01 00:00:07"), symbol = c("XBTUSD", "XBTUSD", "XBTUSD", 
"XBTUSD", "XBTUSD", "XBTUSD"), side = c("Buy", "Sell", "Sell", 
"Sell", "Sell", "Sell"), size = c(10000, 1, 1, 1, 1, 1), price = c(28951, 
28950.5, 28950.5, 28950.5, 28950.5, 28950.5)), row.names = c(NA, 
-6L), class = c("tbl_df", "tbl", "data.frame"))