сгруппировать столбец по дате в разных форматах - PullRequest
1 голос
/ 31 мая 2019

У меня есть набор данных, в котором один столбец содержит значения даты и времени.Каждая дата имеет несколько записей.Первая строка для каждой даты имеет значение даты в форме 29MAY2018_00:00:00.000000, в то время как остальная часть строки для той же даты имеет значения времени, то есть 20:00 - 21:00.Проблема в том, что я хочу суммировать значения в другом столбце для каждого дня.

Образцы данных имеют следующий формат

Date                       A
29MAY2018_00:00:00.000000   
20:00 - 21:00              0.009
21:00 - 22:00              0.003
22:00 - 23:00              0.0003
23:00 - 00:00              0
30MAY2018_00:00:00.000000   
00:00 - 01:00              -0.0016
01:00 - 02:00              -0.0012
02:00 - 03:00              -0.0002
03:00 - 04:00              -0.0023
04:00 - 05:00              0
05:00 - 06:00              -0.0005
20:00 - 21:00              -0.0042
21:00 - 22:00              -0.0035
22:00 - 23:00              -0.0026
23:00 - 00:00              -0.001

Я создал новый столбец

data$C[data$A ==0 ] <- 0
data$C[data$A < 0 ] <- -1
data$C[data$A > 0 ] <- 1

Мне нужно суммировать столбец `C 'для каждой даты.Выход должен быть

A                    B
29-MAY-2019          4
30-MAY-2019         -9
31-MAY-2019          3

1 Ответ

2 голосов
/ 31 мая 2019

Можно создать столбец группировки на основе вхождения полного формата даты и времени в 'Date', summarise в первом 'Date', преобразовать его в формат Dateanydate из * 1004).*) и получите sum из sign из 'A'

library(tidyverse)
library(anytime)
data %>%
    group_by(grp = cumsum(str_detect(Date, "[A-Z]"))) %>% 
    summarise(Date = anydate(first(Date)),
               B = sum(sign(A), na.rm = TRUE))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...