问题描述
我有以下数据:
dat2<-structure(list(year = c(1979L,1979L,1979L),mon = c(5L,5L,6L,7L,7L),day = c(1L,2L,3L,4L,8L,9L,10L,11L,12L,13L,14L,15L,16L,17L,18L,19L,20L,21L,22L,23L,24L,25L,26L,27L,28L,29L,30L,31L,1L,31L),phase = c(2L,5L),Rainfall = c(0,0.25,19.2,11.125,1.95,0.125,23.2,35.575,37.4,6.425,10.275,3.05,50.075,23.05,2,1.4,3.325,5.8,13.375,27.725,14.3,20.9,5.075,11.5,0.825,0.9,0.95,1,0.075,0.025,1.15,0.325,1.925,2.15,6.55,3.15,1.725,0.575,4.875,3,3.6,3.95,14.35,7.625,9.2,9.275,18.375,6.525,0.36,0.1,75.04,38.56,1.18,1.16,4.12,5.7,5,1.36,5.18,0.64,2.68,0.3,3.56,9.62,0.52,1.26,17.04,16.3,2.84,10.2,52.98,51.76,15.06,19.62,19.46
)),row.names = c(NA,92L),class = "data.frame")
此数据集中有四列(“年”,“月”,“天”,“阶段”和“降雨”)。
我想计算以下次数:
(1)“降雨”连续5天每天低于5毫米
(2)阶段为“阶段1”
我不确定如何为此正确应用RLE功能。 到目前为止,我具有以下脚本,但不包含第二个条件:
dat2<-dat[,c("phase","Rainfall")]
countruns = function(x){
RLE = rle(x$Rainfall<5)
sum(RLE$lengths==1)
}
sum()应该给出满足上述两个条件的总数。
在此方面,我将不胜感激。
Lyndz
解决方法
这能达到您想要的吗?
library(tidyverse)
dat_out <- dat2 %>%
mutate(phase1_T = phase == 1,rainfall_T = Rainfall < 5 & lag(Rainfall,n = 1,default = 5) < 5 & lag(Rainfall,n = 2,default = 5) < 5,both_conditions = phase1_T & rainfall_T)
sum(dat_out$both_conditions)
如果您需要按照注释中的说明将其放入函数中,可以执行以下操作:
library(tidyverse)
contruns <- function(.df){
dat_out <- .df %>%
mutate(phase1_T = phase == 1,both_conditions = phase1_T & rainfall_T)
sum(dat_out$both_conditions)
}
contruns(dat2)
,
一种方法是,您首先将size_t
子集划分为require
,然后连续5天以每天低于5毫米的速度{1>}。
<div style={{ backgroundImage: `url(require("images/Beyonce.png"))` }} className="card">