微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果年份是 x 或 y,则每隔一行跳过,否则,只需转到管道中的下一行代码

如何解决如果年份是 x 或 y,则每隔一行跳过,否则,只需转到管道中的下一行代码

我有七年的温度数据,每小时记录一次,持续了大约 9 周。 然而,两年中每半小时记录一次。 在那两年里,我只想使用每隔一行,因此是每小时数据。

七年来我有 112 个鸟巢。有188550行数据... 前几行原始数据:

> head(TempData)
# A tibble: 6 x 6
  Beach  nest  Year Datetime             Temp nestID  
  <chr> <dbl> <dbl> <dttm>              <dbl> <fct>   
1 LB        1  2014 2014-01-12 09:00:00  27.2 LB1_2014
2 LB        1  2014 2014-01-12 10:00:00  27.2 LB1_2014
3 LB        1  2014 2014-01-12 11:00:00  27.2 LB1_2014
4 LB        1  2014 2014-01-12 12:00:00  27.2 LB1_2014
5 LB        1  2014 2014-01-12 13:00:00  27.2 LB1_2014
6 LB        1  2014 2014-01-12 14:00:00  27.1 LB1_2014

使用 if / else 语句会给出以下警告:

Warning message:In if (.$Year == 2015 | .$Year == 2016) { : the condition has length > 1 and only the first element will be used

所以我尝试使用 ifelse 语句,但现在我收到一条错误消息:

Error in ifelse(.,.$Year == 2015 | .$Year == 2016,subset(row_number()%%2 == : (list) object cannot be coerced to type 'logical'

有人可以提供任何其他建议/帮助吗?

这是我代码的开头:

  FloodednestsIncSub = group_by (TempData,nestID,nest,Year) %>%
  ifelse (.$Year == 2015 | .$Year == 2016,subset(row_number() %% 2 == 1) ) %>%
  mutate(TempDrop = Temp - lag(Temp,n=1,default = first(Temp))) %>%
  mutate(Flooded = TempDrop < -0.45)

如果我在“subset(row_number() %% 2 == 1”之后添加一个逗号,并将其留空 - 否则只是转到下一行, 我收到一个不同的错误

Error in ifelse(.,subset(row_number()%%2 ==  : 
  unused argument (alist())

我需要代码 如果年份是 2015 或 2016,则每隔一行跳过,然后转到下一行代码; 否则,只需转到下一行代码...

解决方法

如果每 30 分钟测量一次,您可以只在 30 分钟时过滤一次。 这将删除一半。 可以这样做:

TempData %>% 
    # Only keep whole hours
    dplyr::filter(lubridate::minute(Datetime) == 0) %>%
    # Rest of pipe
    dplyr::mutate(
        TempDrop = Temp - dplyr::lag(Temp,n=1,default = first(Temp)),Flooded = TempDrop < -0.45
    )

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。