绘制年度计数的直方图

时间:2019-09-25 04:20:56

标签: r date strptime

我有一个由一栏组成的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 个答案:

答案 0 :(得分:1)

使用lubridate :: dmy_hm()

与{{lubridate}相比,

strptime()过于复杂。

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()获取dmy_hm()返回的每个 POSIXct 对象的年份,并绘制该直方图。

hist(year(d2))

答案 1 :(得分:1)

这是一种方法。我认为您的日期转换很好,但是您需要计算每年发生的日期数,然后将其绘制为直方图。

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

答案 2 :(得分:1)

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))