Так как данные не предоставлены, я постараюсь ответить на ваш вопрос с примерами данных:
require(lubridate)
require(tidyverse)
## Create some sample data:
time_index <- seq(from = as.POSIXct("2017-01-01 07:00"),
to = as.POSIXct("2018-01-01 18:00"), by = "hour")
value <- rnorm(n = length(time_index))
data <- data.frame(time_index,value)
data <- data %>% mutate (hour = hour(time_index),
month = month(time_index)) %>%
group_by(month,hour)
head(data)
> data
# A tibble: 8,772 x 4
# Groups: month, hour [288]
time_index value hour month
<dttm> <dbl> <int> <dbl>
1 2017-01-01 07:00:00 -0.626 7 1
2 2017-01-01 08:00:00 0.184 8 1
3 2017-01-01 09:00:00 -0.836 9 1
4 2017-01-01 10:00:00 1.60 10 1
5 2017-01-01 11:00:00 0.330 11 1
6 2017-01-01 12:00:00 -0.820 12 1
7 2017-01-01 13:00:00 0.487 13 1
8 2017-01-01 14:00:00 0.738 14 1
9 2017-01-01 15:00:00 0.576 15 1
10 2017-01-01 16:00:00 -0.305 16 1
# ... with 8,762 more rows
, а затем просто filter()
комбинация час / месяц, которую вы хотели бы получить так:
если Вы знакомы с проектированием баз данных, конкретно понятие нормализации, то ответ легок: информационно-центрический класс должен представить объект в третьей нормальной форме
если это не полезно, попробуйте это вместо этого:
это о том, насколько я могу пойти с общим абстрактным советом (не пишущий длинное эссе); Вы могли бы отправить один из своих классов для критического анализа при необходимости в определенном совете
я думаю, что Объектный дизайн является таким же искусства, как это - наука. Это занимает время и практика, чтобы понять, как разработать чистые и изящные классы. Возможно, если можно дать пример простого класса, Вы разработали это, Вы не счастливы с ТАК пользователями, может критиковать и дать подсказки. Я не уверен, что существуют любые общие ответы за пределами того, что Вы уже считали в текстах.
Создание классов, которые запускаются чистый и затем становятся грязными, является базовой частью OO, именно тогда Вы осуществляете рефакторинг. Много devs пытаются перейти к идеальному дизайну класса с самого начала, по моему опыту, это просто не возможно, вместо этого Вы спотыкаетесь вокруг, решая проблему и затем осуществляете рефакторинг. Можно получить, базовые классы и интерфейсы, поскольку дизайн появляется.
Наиболее уважаемым гуру OO, которого я лично знаю, является StackOverflow. Поместите свои имена классов здесь, и я считаю, что Вы получите приятное количество обзоров.
Метрики? Не so's, что Вы доверяли бы им.
Ваши классы делают задание получения работы программы и хранения его удобный в сопровождении через несколько изменений?
Если да, Вы делаете хорошо.
Если не, спросите себя почему не и затем измените то, что не работает.
Попытайтесь сфокусироваться на поведении вместо структуры. Объекты 'живут' объекты с поведением и обязанностями. Вы говорите им делать вещи. Взгляните на подход карты CRC, чтобы помочь Вам смоделировать этот путь.
Классы обычно привыкли к образцовому понятию проблемной области. После того как у Вас есть четко определенная проблема (иначе набор вариантов использования), Вы сможете идентифицировать всех участников. Подмножество участников будет внутренним системе, которую Вы разрабатываете. Запустите с одного большого черного квадрата как своя система. Продолжайте ломать его, как и когда у Вас будет больше информации. Когда у Вас есть уровень, где они больше не могут ломаться (в понятия в Вашей проблемной области), Вы начинаете получать свои классы.
Но затем, это - субъективное представление негуру. Я предложил бы щепотку соли меню.