我有一个34154695 obs的数据框。在数据集中,类别变量的值为0表示“未购买”,值为1表示“购买”。
> str(data)
'data.frame': 34154695 obs. of 5 variables:
$ SessionID: int 1 1 1 2 2 2 2 2 2 3 ...
$ Timestamp: Factor w/ 34069144 levels "2014-04-01T03:00:00.124Z",..: 1452469 1452684 1453402 1501801 1501943 1502207 1502429 1502569 1502932 295601 ...
$ ItemID : int 214536500 214536506 214577561 214662742 214662742 214825110 214757390 214757407 214551617 214716935 ...
$ Category : Factor w/ 339 levels "0","1","10","11",..: 1 1 1 1 1 1 1 1 1 1 ...
$ Class : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
我面临着寻找解决方案的困难,该解决方案需要根据班级价值= 1绘制每周,每天和按时间购买的数量的直方图,并希望像下面的图片所示输出。
我尝试了此代码,但出现错误
library(dplyr)
library(lubridate)
x <- strptime(data$Timestamp, format = "%Y-%m-%d")#assume you need only days/month , assign to a variable, because dplyr has problems with with date type.
data$month <- month(x) #get month from date obj.
month_summ <- data %>% group_by(month) %>% #group by month and calculated sold items per month
summarise(
total_sales = n()
)
library(ggplot2)
ggplot(data=month_summ, aes(x=month, y=ItemID)) + geom_bar(stat="identity") #plot the histogram
grouped_df_impl(data,unname(vars),drop)中的错误:列日期是不受支持的POSIXlt / POSIXt类
有人可以告知我该如何进行吗?真的,谢谢您的帮助和建议。
亲切的问候
答案 0 :(得分:1)
这个问题尚不完全清楚,但是下面的代码产生了两个图表,一个图表是每个Class
的{{1}},另一个是每小时每小时Weekday
的另一个。
我首先将列Class
强制转换为类Class
,在您的"integer"
输出中,它是一个str(data)
。
"factor"
现在显示图形。首先在工作日之前。
library(tidyverse)
library(lubridate)
data$Class <- as.integer(as.character(data$Class))
data$Weekday <- format(data$Timestamp, "%a")
data$Hour <- hour(data$Timestamp)
按小时。
aggregate(Class ~ Weekday, data, sum) %>%
ggplot(aes(Weekday, Class)) +
geom_col()
编辑。
上面的图也可以在不修改原始数据集aggregate(Class ~ Hour, data, sum) %>%
ggplot(aes(Hour, Class)) +
geom_col()
的情况下生成。它们将由更大的管道产生,但是像下面这样做可能更简单或更可取。
从原始数据开始。
data
数据生成代码。
data$Class <- as.integer(as.character(data$Class))
data %>%
mutate(Weekday = format(Timestamp, "%a")) %>%
group_by(Weekday) %>%
summarise(Class = sum(Class)) %>%
ggplot(aes(Weekday, Class)) +
geom_col()
data %>%
mutate(Hour = hour(Timestamp)) %>%
group_by(Hour) %>%
summarise(Class = sum(Class)) %>%
ggplot(aes(Hour, Class)) +
geom_col()