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"))
我有一个月的以下数据 (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"))