Составьте гистограмму годовых показателей - PullRequest
0 голосов
/ 25 сентября 2019

У меня есть CSV-файл, который состоит из одного столбца.В столбце указана дата размещения на сайте.Я хочу построить гистограмму, чтобы увидеть, как количество постов меняется с годами.Файл содержит годы (с 2012 по 2016 годы) и состоит из 11 000 строк.

образец файла:

2     30/1/12 21:07
3      2/2/12 15:53
4       3/4/12 0:49
5     14/11/12 3:49
6     11/8/13 16:00
7      31/7/14 8:08
8     31/7/14 10:48
9       6/8/14 9:24
10    16/12/14 3:34

Типы данных: фрейм данных class(postsData) [1] "data.frame"

Я попытался преобразовать данные в текст, используя функцию strptime, как показано ниже:

formatDate <- strptime(as.character(postsData$Date),format="“%d/%m/%y")

, затем построил гистограмму

hist(formatDate,breaks=10,xlab="year")

enter image description here

Любой совет или предложение было бы полезно.Спасибо,

Ответы [ 3 ]

1 голос
/ 25 сентября 2019

Вот один из подходов.Я думаю, что ваше преобразование дат в порядке, но вам нужно посчитать количество дат, которые встречаются в каждом году, а затем построить график, который считается гистограммой.

library(tidyverse)
# generate some data

date.seq <- tibble(xdate = seq(from = lubridate::ymd_hms('2000-01-01 00:00:00'), to=lubridate::ymd_hms('2016-12-31 24:59:59'), length.out = 100))

date.seq  %>%  
  mutate(xyear = lubridate::year(xdate)) %>% # add a column of years
  group_by(xyear) %>% 
  summarise(date_count = length(xdate)) %>%  # Count the number of dates that occur in each year
  ggplot(aes(x = xyear, y = date_count)) +
  geom_col(colour = 'black', fill = 'blue') # plot as a column graph
1 голос
/ 25 сентября 2019

Нет проблем с strptime()*, однако опция format предназначена для указания того, как форматируется.

df1$date <- strptime(df1$date, format="%d/%m/%y %H:%M")

# [1] "2012-01-30 21:07:00 CET"  "2012-02-02 15:53:00 CET" 
# [3] "2012-04-03 00:49:00 CEST" "2012-11-14 03:49:00 CET" 
# [5] "2013-08-11 16:00:00 CEST" "2014-07-31 08:08:00 CEST"
# [7] "2014-07-31 10:48:00 CEST" "2014-08-06 09:24:00 CEST"
# [9] "2014-12-16 03:34:00 CET" 

Тогда вы, вероятно, захотите использовать функцию format()

formatDate <- format(df1$date, format="%F")

(или в этом случае проще с formatDate <- as.Date(df1$date))

, а затем

hist(formatDate, breaks=10, xlab="year")

* кредитов @ MikkoMarttila

Данные

df1 <- structure(list(id = 2:10, date = c("30/1/12 21:07", "2/2/12 15:53", 
"3/4/12 0:49", "14/11/12 3:49", "11/8/13 16:00", "31/7/14 8:08", 
"31/7/14 10:48", "6/8/14 9:24", "16/12/14 3:34")), class = "data.frame", row.names = c(NA, 
-9L))
1 голос
/ 25 сентября 2019

использовать lubridate :: dmy_hm ()

strptime(), на мой взгляд, слишком сложно по сравнению с { lubridate }.

library(lubridate)
d <- c("30/1/12 21:07",
       "2/2/12 15:53",
       "3/4/12 0:49",
       "14/11/12 3:49",
       "11/8/13 16:00",
       "31/7/14 8:08",
       "31/7/14 10:48",
       "6/8/14 9:24",
       "16/12/14 3:34")
d2 <- dmy_hm(d)
d2

Возвращает:

[1] "2012-01-30 21:07:00 UTC"
[2] "2012-02-02 15:53:00 UTC"
[3] "2012-04-03 00:49:00 UTC"
[4] "2012-11-14 03:49:00 UTC"
[5] "2013-08-11 16:00:00 UTC"
[6] "2014-07-31 08:08:00 UTC"
[7] "2014-07-31 10:48:00 UTC"
[8] "2014-08-06 09:24:00 UTC"
[9] "2014-12-16 03:34:00 UTC"

Как видите, функции lubridate возвращают POSIXct объекты.

class(d2)
[1] "POSIXct" "POSIXt" 

Далее вы можете использовать lubridate::year(), чтобы получить год для каждого POSIXct объект, возвращаемый dmy_hm(), и построение этой гистограммы.

hist(year(d2))
...