我需要确定哪一行符合以下两个条件:-当前月降雨量低于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))
谢谢
发布于 2019-04-25 03:33:49
您可以将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
发布于 2019-04-25 03:57:29
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
https://stackoverflow.com/questions/55837253
复制相似问题