Набор данных поднабора, чтобы только сохранить среднее - PullRequest
0 голосов
/ 16 июня 2019

data

Пожалуйста, смотрите прикрепленное изображение набора данных.

Каковы различные способы сохранения только одного значения для каждого «Месяца»?У меня есть куча точек данных, и мне нужно только сохранить, скажем, среднее значение.

Большое спасибо

Ответы [ 4 ]

1 голос
/ 16 июня 2019

Ответ data.table:

# load libraries
library(data.table)
library(lubridate)

setDT(dt) 

dt[, .(meanValue = mean(value, na.rm =TRUE)), by = .(monthDate = floor_date(dates, "month"))] 

Где dt имеет как минимум столбцы value и dates.

1 голос
/ 16 июня 2019
library(tidyverse)
library(lubridate)

#example data from airquality:

aq<-as_data_frame(airquality)

aq$mydate<-lubridate::ymd(paste0(2018, "-", aq$Month, "-", aq$Day))
> aq
# A tibble: 153 x 7
   Ozone Solar.R  Wind  Temp Month   Day mydate    
   <int>   <int> <dbl> <int> <int> <int> <date>    
 1    41     190  7.40    67     5     1 2018-05-01
 2    36     118  8.00    72     5     2 2018-05-02
 3    12     149 12.6     74     5     3 2018-05-03
aq %>% 
    group_by("Month" = month(mydate)) %>% 
    summarize("Mean_Temp" = mean(Temp, na.rm=TRUE))

Суммировать может возвращать несколько суммарных функций :

aq %>% 
    group_by("Month" = month(mydate)) %>% 
    summarize("Mean_Temp" = mean(Temp, na.rm=TRUE), 
              "Num" = n(), 
              "SD" = sd(Temp, na.rm=TRUE))
# A tibble: 5 x 4
  Month Mean_Temp   Num    SD
  <dbl>     <dbl> <int> <dbl>
1  5.00      65.5    31  6.85
2  6.00      79.1    30  6.60
3  7.00      83.9    31  4.32
4  8.00      84.0    31  6.59
5  9.00      76.9    30  8.36

Lubridate Cheatsheet

1 голос
/ 16 июня 2019

Другой способ использования функции aggregate().

> aggregate(Temp ~ Month, data=airquality, FUN = mean)
  Month     Temp
1     5 65.54839
2     6 79.10000
3     7 83.90323
4     8 83.96774
5     9 76.90000
1 голос
/ 16 июня 2019

Мы можем сгруппировать по index набору данных, используйте это в aggregate (из base R), чтобы получить mean

aggregate(dat, index(dat), FUN = mean)

Примечание: здесь мы предположили, что набор данныхв формате xts или zoo.Если в наборе данных есть столбец месяца, используйте

aggregate(dat, list(dat$Month), FUN = mean)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...