与“错误:美学必须长度为1或与数据相同”相关的问题

时间:2017-07-10 00:09:39

标签: r ggplot2 lubridate

我理解主题“错误:美学必须是长度1或与数据相同”已经做了很多(在线提供了大量的阅读),但是,我仍然有一些未解决的问题

我正在处理有关2015年拨打西雅图警察局的所有电话的数据集。在我将数据清理成可接受的格式后,我最终得到了62,092行和13列的数据集(数据集名称为SPD_2015) )。我会在这个问题中添加一部分数据集,但我并不完全确定如何以干净清晰的格式进行。

我使用package lubridate来提取与我的数据集相关的时间。然后我创建了一个条形图,显示犯罪发生的时间

ggplot(SPD_2015, aes(hour(date.reported.time))) +
  geom_bar(width = 0.7) 

hour that crimes are commited

并且效果很好。

由于Car Prowls是最常报告的犯罪行为,我想知道这些汽车四处徘徊的时间。这就是我遇到错误“”错误:美学必须是长度1或与数据相同“。

我读到ggplot2在ggplot代码中进行子集时不喜欢它,所以我通过创建一个单独的数据框来对我的数据进行子集化。

car.prowl <- filter(SPD_2015, summarized.offense.description == "CAR PROWL")

所以这是我的问题。为什么当我查看我新创建的数据集“car.prowl”的维度时,我发现它的维度为11,539行和13列。但是,当我检查在happen.time列(犯罪发生的时间)中的小时数时,我得到的长度为62,092,这是原始数据集的长度?

在我看来,我想象下面的代码可以工作:

ggplot(car.prowl, aes(hour(occured.time))) +
  geom_bar()

car.prowl $ occured.time的长度是正确的:

> length(car.prowl$occured.time)
[1] 11539

但是当我应用小时函数时,我得到原始数据集的长度:

> length(hour(car.prowl$occured.time))
[1] 62092

应该是11,539。

谢谢。请让我知道我能做些什么来使我的问题更清楚。

1 个答案:

答案 0 :(得分:0)

这可能是杰里米上面所说的缓存问题。我不确定这会起作用,但你可以尝试以下方法,将各个方面联系在一起。

SPD_2015%>%
 filter(summarized.offense.description == "CAR PROWL")%>%
 ggplot(aes(hour(occured.time)))+
 geom_bar()