【问题标题】:How do I average a group of data by day in R, Then pull a specific date range of data如何在 R 中按天平均一组数据,然后提取特定日期范围的数据
【发布时间】:2019-03-07 16:42:54
【问题描述】:

我对 R 比较陌生 我有一个大数据集,它提供了当天的几个数据值。因此,为了简化问题,我需要在一个显示日期和平均值的表格中获取每一天的平均值。

Date_Recorded     Value
2016-08-19        74.2
2016-08-19        74.6
2016-08-20        85.63
2016-08-20        88.55

我希望结果表看起来像这样

Date_Recorded     Value
2016-08-19        74.4
2016-08-20        87.09

那么在此之后,我将如何从这个数据集或任何其他数据集中提取一个日期范围的数据,比如从 2​​016 年 8 月 20 日到 2018 年 2 月 4 日?

【问题讨论】:

  • 聚合,使用...好吧,aggregate() - 见here for more info。对于您的第二部分,确保您的 Date_Recorded 变量设置为 datetime 并简单地执行 df[df$Date_Recorded >= ... & df$Date_Recorded <= ..., ]

标签: r time-series average mean date-range


【解决方案1】:

Chabo 的回答很好。或者,您可以使用 tidyverse 方法:

library(tidyverse)

Date_Recorded<-c("2016-08-19", "2016-08-19", "2016-08-20", 
                 "2016-08-20", "2016-08-21", "2016-08-21")

Value <- c(74.2, 74.6, 85.63, 
           88.55, 70.1, 70.2)

df<-data.frame(Date_Recorded,Value)

df$Date_Recorded<-as.Date(df$Date_Recorded)

# To create the resulting table you wanted
df %>%
  group_by(Date_Recorded) %>% 
  summarise(mean(Value, na.rm = FALSE))


# Or to search for a date range. You could use filter(Date_Recorded == "2018-10-02") to 
# serach for a single date
df %>%
  filter(Date_Recorded >= "2016-08-20" & Date_Recorded <= "2016-08-21") %>% #to select a date range
  group_by(Date_Recorded) %>%
  summarise(mean(Value, na.rm = FALSE))

【讨论】:

    【解决方案2】:

    我们可以使用聚合来做到这一点,这是 R 中基本统计信息的一部分...

    Date_Recorded<-c(  
    "2016-08-19",        
    "2016-08-19",        
    "2016-08-20",      
    "2016-08-20")
    
    Value<-c(
    74.2,
    74.6,
    85.63,
    88.55
    )
    
    df<-data.frame(Date_Recorded,Value)
    
    df$Date_Recorded<-as.Date(df$Date_Recorded)
    
    test_df<-aggregate(df["Value"], by=df["Date_Recorded"], FUN=mean)
    
    > test_df
      Date_Recorded  Value
    1    2016-08-19   74.40
    2    2016-08-20   87.09
    
    # As pointed out by @Sotos
    start_date<-as.Date("2016-08-18")
    end_date<-as.Date("2016-08-19")
    
    test_df[test_df$Date_Recorded >= start_date & test_df$Date_Recorded <= 
    end_date, ]
    
      Date_Recorded Value
    1    2016-08-19  74.4
    

    感谢@Sotos 这个问题的后半部分。

    【讨论】:

    • 谢谢。那行得通...但是我将如何从该数据集或任何其他数据集中提取从 2016 年 8 月 20 日到 2018 年 2 月 4 日的数据日期范围?
    • 请查看新的编辑,正如@Sotos 所指出的,我们可以将一个子集应用于我们的数据。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 2021-11-01
    • 1970-01-01
    • 2016-11-16
    • 2019-05-23
    相关资源
    最近更新 更多