Как перевести время из символа в время и сгруппировать по часам - PullRequest
1 голос
/ 04 июня 2019

Необходимо преобразовать символьные данные как время в фактическое время и сгруппировать по часам

library(dplyr) 
library(stringr)
library(lubridate)
library(chron)
test <- read.csv("O:/Commercial Team/Customer Business Unit/ECOMMERCE and DIGITAL/9. TEAM/4_M_APPLEYARD.GEO.csv", header = TRUE)
colnames(test)
time <- str_split(test$ProcessedDate, " ", simplify = TRUE)
time2 <- c(time[,2])

Ответы [ 3 ]

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

Вы можете создать часовой столбец и использовать group_by():

library(tidyverse)
library(lubridate)

df <- tibble(ProcessedDate = sample(seq.POSIXt(from = as_datetime("2018-01-01 00:00:00"),
                                        to = as_datetime("2018-12-31 23:59:59"),
                                        by = "sec"), size = 1000, replace = TRUE),
             placeholder_value = rlnorm(n = 1000))

df2 <- df %>% 
  mutate(Processed_hour = hour(ProcessedDate),
         Processed_minute = minute(ProcessedDate),
         Processed_second = second(ProcessedDate)) %>% 
  group_by(Processed_hour) %>%
  summarise(sum = sum(placeholder_value)) 

print(df2, n = Inf)

ggplot(df2, aes(x = as_factor(Processed_hour), y = sum)) +
  geom_col()
1 голос
/ 04 июня 2019

Проверьте strptime здесь .Я не знаю, как выглядят ваши данные, поэтому вот пример:

z <- strptime('2019-06-4 09:32:14', format = '%Y-%m-%d %H:%M%:S')

, который дает вывод [1] "2019-06-04 09:32:14 CEST".

Вы можете редактировать формат по своему усмотрению.

Редактировать: он основан на секундах, поэтому z + 3600 = "2019-06-04 10:32:14 CEST"

0 голосов
/ 04 июня 2019

По существу, более простая версия ответа larsoevlisen, так как я думаю, что вы можете делать все с lubridate (но трудно сказать без образца ваших данных):

library(tidyverse)
library(lubridate)

#create imaginary data set for this answer
#skip this step if you already have your data
df <- tibble(yourtimestamp = c("2019-06-04 11:20", "2019-06-04 11:25", "2019-06-04 12:00"))

#convert your timestamp vector to POSIX
df$yourtimestamp <- ymd_hm(df$yourtimestamp)
#the function you use here depends on what order the parts of your time stamp are, 
#so for example if your character timestamp is US style: month, day, year 
#such as 
#06/20/2019 11:20 then use mdy_hm() instead
#or if it was UK style 20/06/2019 11:20 then use dmy_hm() etc
#or if it contains seconds such as 06/20/2019 11:20:47 use mdy_hms()

#get hour
df$just_the_hour <- hour(df$yourtimestamp)

#group by hour and summarise
by_hour <- group_by(df, just_the_hour)
s <- summarise(by_hour, num_events = n())
s

Выход:

# A tibble: 2 x 2
  just_the_hour num_events
          <int>      <int>
1            11          2
2            12          1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...