如何解决按R中的间隔过滤列并使用ggplot
我有以下数据集:
dat<- structure(list(Year = c(1979L,1979L,1979L),Month = c(1L,1L,2L,3L,4L,5L,6L,7L,8L,9L,10L,11L,12L,12L),Day = c(1L,13L,14L,15L,16L,17L,18L,19L,20L,21L,22L,23L,24L,25L,26L,27L,28L,29L,30L,31L,31L),Rainfall = c(1,35.5,20.3,2.5,32,66.8,1.8,5.3,11.7,40.4,45.7,15.3,21.6,10.5,26.2,54.1,1.5,26.9,39.4,1.3,95.6,10.2,5.1,4.1,2.9,0.5,2.1,15.7,14.2,28.7,134.2,26.3,2.3,2.8,0.3,0.8,3.3,13.6,32.9,47.7,78.8,27.1,45.5,2,1.4,19.8,11.4,8.7,4.8,24.7,10.4,6.9,13,3.1,23.9,7.4,29.8,27,16.5,6.6,0.6,9.7,6.4,11.1,16.8,3.6,95.5,3.4,35.3,36.3,6.1,5.9,52.1,3.8,7.9,8.9,5.6,9.1,22.6,17.5,68.1,105.9,30.7,31.2,18.8,6.3,43.3,49.3,1,4.3,5.4,64.8,38.1,8.4,4.4,1.6,36.6,45.2,13.9,25.7,19.1,22.1,24.2,11.5,21.3,28.2,67.8,55.7,25.3,27.5,12.7,14.7,14.5,10.6,14.3,15.2,37.1,18.3,4.9,68.6,20.1,50.8,15,1.1,44.2,24.4,39.1,151.7,26.4,7.1,7.6,84.7,0)),row.names = c(NA,365L),class = "data.frame")
此数据有四列:年,月,日,降雨量。
(1)我想按照降雨等级/类别将这些数据分开:
1-20 mm/day
20-50 mm/day
50-100 mm/day
>100 mm/day
(2)计算每个降雨每月等级的天数,并将结果计数绘制为以R为单位的堆叠条形图(月数与计数)。
到目前为止我所拥有的:
现在,我使用dplyr软件包过滤值。这是一月的示例。
library(dplyr)
a<-filter(dat2,Rainfall>=1 &Rainfall <=20)
count(a[which(a$Month==1),])
我每个月都会针对四个类别进行此操作。 然后手动存储计数。
我想问一下是否有一种更有效,更快捷的方法。 也许是一个简单的脚本,最后使用ggplot进行绘图?
在此方面,我将不胜感激。
解决方法
您可以使用cut
将Rainfall
划分为存储桶,并为每个count
和图绘制Month
。
library(dplyr)
library(ggplot2)
dat %>%
count(Month = factor(Month),Rainfall = cut(Rainfall,c(-Inf,20,50,100,Inf)),name = 'count') %>%
ggplot() + aes(Month,count,fill = Rainfall) + geom_col()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。