【发布时间】:2021-01-28 03:49:07
【问题描述】:
我有一个数据集,其中包含时间、价格和买卖代码。对于每个时间段,我都在尝试计算最高买入价和最低卖出价,然后取平均值。如果其中一个在特定时间不存在,那么它将只是曾经存在的那个。例如,如果只有买入价,那么平均值就是当时的买入价。对于此数据,1 是买入,0 是卖出。数据集如下所示:
data <- data.frame(buy_sell = c(0,0,0,0,0,0,1,1,1,1,1,1)
,price = c(71,65,66,77,89,80,55,45,23,46,50,45)
,time = c(1,1,1,2,2,1,2,1,2,1,2,3))
data$av_price <- ifelse(data$time == 1,55.5,ifelse(data$time == 2,66,45))
data
我试图在 dyplr 中执行此操作,但是当您进行分组时,它会为两个组计算每个组,因此您不能取两个组的平均值。我的方法看起来像这样。
data <- data %>% group_by(time,buy_sell) %>%
mutate(max_buy = max(price),min_sell = min(price))
data
有人可以帮我构建代码以获得所需的结果吗?
【问题讨论】:
-
这样的?
data %>% group_by(time, buy_sell) %>% mutate(average_price = across(max_buy = mean(max(price)), min_sell = mean(min(price))))
标签: r dplyr tidyverse tidyr data-cleaning