Рассчитать разницу в дате, используя тот же столбец даты - PullRequest
0 голосов
/ 16 мая 2018

Я хочу найти общую сумму минут работы батареи за месяц и год.Для этого у меня есть следующее условие:

Если Battery.voltage <50, то «Да, в противном случае» Нет. </p>

Примечание: для расчета общей суммы минут мы можем использовать столбец отметки времениэто день, месяц, год, час, минуты.

Это мои данные:

#          Time.stamp Battery.voltage Condition
# 1  01/04/2016 00:00              51        No
# 2  01/04/2016 00:01              52        No
# 3  01/04/2016 00:02              45       Yes
# 4  01/04/2016 00:03              48       Yes
# 5  01/04/2016 00:04              49       Yes
# 6  01/04/2016 00:05              55        No
# 7  01/04/2016 00:06              54        No
# ...

structure(list(
  Time.stamp = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 10L, 11L, 12L, 12L, 13L), 
                         .Label = c("01/04/2016 00:00", "01/04/2016 00:01", "01/04/2016 00:02", "01/04/2016 00:03", 
                                    "01/04/2016 00:04", "01/04/2016 00:05", "01/04/2016 00:06", "01/04/2016 00:07", 
                                    "01/04/2016 00:08", "01/04/2016 00:09", "01/04/2016 00:11", "01/04/2016 00:12", 
                                    "01/04/2016 00:13"), class = "factor"), 
  Battery.voltage = c(51L, 52L, 45L, 48L, 49L, 55L, 54L, 52L, 51L, 49L, 48L, 47L, 45L, 50L, 51L), 
  Condition = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 1L, 1L), 
                        .Label = c("No", "Yes"), class = "factor")), 
  .Names = c("Time.stamp", "Battery.voltage", "Condition"), 
  class = "data.frame", row.names = c(NA, -15L))

Мой ожидаемый результат примерно такой:

Month    year    Sum of mins running in battery
Jan      2016     350min
Feb      2016     450min
etc.

1 Ответ

0 голосов
/ 16 мая 2018

К сожалению, ваши данные выборки не очень репрезентативны для вашей постановки проблемы, поскольку они включают данные только за один день. Было бы полезно предоставить некоторый код, который генерирует случайные данные для достаточного количества записей (т.е. дат).

Кроме того, вы можете адаптировать следующее решение (здесь я предполагаю, что ваш формат отметки времени "DD/MM/YYYY"):

df %>%
    mutate(
        Time.stamp = as.POSIXct(Time.stamp, format = "%d/%m/%Y %H:%M"),
        byday = format(Time.stamp, "%d/%m/%Y"),
        bymonth = format(Time.stamp, "%d/%m"),
        byyear = format(Time.stamp, "%Y")) %>%
    group_by(byday) %>%
    summarise(sum.running.in.mins = sum(Condition == "Yes"))
## A tibble: 1 x 2
#  byday      sum.running.in.mins
#  <chr>                    <int>
#1 01/04/2016                   7

Здесь мы создаем столбцы byday, bymonth и byyear, в соответствии с которыми вы можете группировать записи и вычислять сумму общего времени выполнения для группы. В приведенном выше примере я вычисляю общее время работы по дням; чтобы получить общее время работы в месяц, вы должны заменить group_by(byday) на group_by(bymonth).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...