我需要确定哪一行遵循以下两个条件: - 当前每月降雨量低于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))
谢谢
你可以使用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
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