Как мне усреднить группу данных по дням в R, затем вытащить определенный диапазон дат данных - PullRequest
0 голосов
/ 02 октября 2018

Я относительно новичок в 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

Затем, после этого, Как мне начать извлекать диапазон дат, скажем, из 2016-08-20 до 2018-02-04 из этого набора данных или любого другого набора данных?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Отличный ответ Чабо.В качестве альтернативы, вы можете использовать подход 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))
0 голосов
/ 02 октября 2018

Мы можем сделать это, используя агрегат, часть базовой статистики в 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 за вторую половину этого вопроса.

...