繁体   English   中英

R匹配并比较不同向量的值

[英]R Match and compare values from different vectors

我正在从单个价格向量计算每小时平均价格。 我想将此小时值与每日平均值进行比较-并删除所有每日均值超过2倍的值。 我可以很容易地计算出不同的值,但是我不知道如何将小时值与每日值进行比较?

快速数据示例:

df <- data.frame(dates = rep(seq(from = as.POSIXct("2013-01-01 00:00:00", tz = "UTC"), 
  to = as.POSIXct("2013-01-30 23:00:00", tz = "UTC"), by = "hour" ), 12), 
  price = runif(8640, min = -25, max = 225) )

require(dplyr)

results <- group_by(df, dates)
results <- summarise(results, 
                          average = mean(price))

day_results <- mutate(df, days = format(df$dates, "%Y-%m-%d"))
day_results <- group_by(day_results, days)
day_results <- summarise(day_results, 
                          average_d = mean(price))

我不知道如何将24个averageaverage_d的单个日值进行比较。

我想做什么很清楚吗?

这简单吗:

> df %>% group_by(dates) %>% filter(price>2*mean(price))
Source: local data frame [811 x 2]
Groups: dates

                 dates    price
1  2013-01-01 02:00:00 182.4726
2  2013-01-01 07:00:00 155.5009
3  2013-01-01 20:00:00 139.6948
4  2013-01-01 22:00:00 132.3332
5  2013-01-02 06:00:00 222.0633
6  2013-01-03 01:00:00 217.6383
7  2013-01-03 15:00:00 224.7268
8  2013-01-03 18:00:00 215.8826

即按日期对数据进行分组,然后仅过滤价格大于该组中均值两倍的数据? 或者,如果您也想在输出中保留平均价格,请执行以下操作:

> df %>% group_by(dates) %>% mutate(average=mean(price)) %>% filter(price > 2*average) %>% arrange(dates)
Source: local data frame [811 x 3]
Groups: dates

                 dates    price  average
1  2013-01-01 00:00:00 140.5748 70.12211
2  2013-01-01 00:00:00 201.6484 70.12211
3  2013-01-01 01:00:00 223.9240 89.91996
4  2013-01-01 01:00:00 196.5975 89.91996
5  2013-01-01 01:00:00 203.6165 89.91996
6  2013-01-01 02:00:00 182.4726 70.85858
7  2013-01-01 02:00:00 193.0930 70.85858
8  2013-01-01 02:00:00 177.7848 70.85858
9  2013-01-01 03:00:00 202.9842 92.84580
10 2013-01-01 03:00:00 217.1840 92.84580

那也使用arrange按日期排序输出。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM