确定符合两个条件的行

时间:2019-04-24 19:29:58

标签: r which

我需要确定哪个行符合以下两个条件: -当前每月降雨量低于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))

谢谢

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

Base R解决方案:

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