在R中的函数中使用RLE

问题描述

我有以下数据:

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...