首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >标识符合以下两个条件行

标识符合以下两个条件行
EN

Stack Overflow用户
提问于 2019-04-25 03:29:58
回答 2查看 47关注 0票数 0

我需要确定哪一行符合以下两个条件:-当前月降雨量低于20之前的行-当前月降雨量高于20的行

我正在尝试确定播种季节何时开始,因此我想说(例如):播种季节将在降雨量低于20的前一个月开始,而下一个月降雨量较高。在本例中,我发送给您的月份是10月份,因为9月份的降雨量等于2,而11月份的降雨量等于100。我需要编写一个函数,为我提供与该月相对应的索引。

代码语言:javascript
运行
复制
df <- data.frame(month=c(1:12),monthly_rainfall=c(60,67,164,65,5,3,0,1,2,24,100,102))

谢谢

EN

回答 2

Stack Overflow用户

发布于 2019-04-25 03:33:49

您可以将lead()lag()函数与filter()一起使用

代码语言:javascript
运行
复制
library(dplyr)

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

  month monthly_rainfall
1     9                2
2    10               24

您可以使用以下命令获取索引

代码语言:javascript
运行
复制
df %>% mutate(planting_season = lag(monthly_rainfall) < 20 & lead(monthly_rainfall) > 20) %$% 
       planting_season %>% 
       which()

[1]  9 10

或者,您可以使用以下命令获取该月:

代码语言:javascript
运行
复制
df %>% filter(lag(monthly_rainfall) < 20,
              lead(monthly_rainfall) > 20) %$% 
              month

[1]  9 10
票数 0
EN

Stack Overflow用户

发布于 2019-04-25 03:57:29

Base R解决方案:

代码语言:javascript
运行
复制
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)
}

然后你可以这样叫它:

代码语言:javascript
运行
复制
get_months(df$monthly_rainfall)
# 9 10
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55837253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档