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