确定遵循两个条件的行

问题描述 投票:0回答:2

我需要确定哪一行遵循以下两个条件: - 当前每月降雨量低于20的行 - 当前月度降雨量高于20的行

我正在尝试确定种植季节何时开始,因为我想说(例如):种植季节将从降雨前的月份低于20但月份开始的月份开始。在这个例子中,我发送给你的那个月将是10月,因为在9月,降雨量等于2但是在11月等于100.我需要写一个函数,给出与该月相对应的指数。

df <- data.frame(month=c(1:12),monthly_rainfall=c(60,67,164,65,5,3,0,1,2,24,100,102))

谢谢

r which
2个回答
0
投票

你可以使用lead()lag()函数以及filter()

library(dplyr)

df %>% 
  filter(lag(monthly_rainfall) < 20,
         lead(monthly_rainfall) > 20)

  month monthly_rainfall
1     9                2
2    10               24

你可以得到索引

df %>% mutate(planting_season = lag(monthly_rainfall) < 20 & lead(monthly_rainfall) > 20) %$% 
       planting_season %>% 
       which()

[1]  9 10

或者你可以通过以下方式获得月份:

df %>% filter(lag(monthly_rainfall) < 20,
              lead(monthly_rainfall) > 20) %$% 
              month

[1]  9 10

0
投票

Basal P Solutory:

get_months <- function(x, high = 20, low = 20) {
    n <- length(x)
    which(c(NA, x[1:(n-1)]) < high & c(x[2:n], NA) > low)
}

然后你可以像这样调用它:

get_months(df$monthly_rainfall)
# 9 10
© www.soinside.com 2019 - 2024. All rights reserved.