首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >计算两个值之间的观察值数量

计算两个值之间的观察值数量
EN

Stack Overflow用户
提问于 2018-06-09 06:54:20
回答 1查看 32关注 0票数 0

对于每个单独的stormMark值,我要计算从flow列中的最后一个非零数开始的天数。下面是我的数据示例:

代码语言:javascript
复制
> head(newdat)
        dates  station flow stormMark
 1 2008-01-01 09512162  20        1
 2 2008-01-02 09512162   0       NA
 3 2008-01-03 09512162   5       NA
 4 2008-01-04 09512162   0       NA
 5 2008-01-05 09512162   0       NA
 6 2008-01-06 09512162 3.5        2

所需的输出将如下所示:

代码语言:javascript
复制
stormMark days.since.flow
 1          NA
 2          3
EN

回答 1

Stack Overflow用户

发布于 2018-06-09 07:37:33

使用tidyversedifftime的一种解决方案可以通过使用前一个dates填充non_zero_flow_date来实现,前提是前一个dates不是零。如果之前的flow0,则将non_zero_flow_date设置为NA。使用tidyr::fill填充non_zero_flow_date列的NA值。最后,通过difftime函数得到datesnon_zero_flow_date之间的差异。

代码语言:javascript
复制
library(tidyverse)

df %>% mutate(dates = as.Date(dates)) %>%
  mutate(non_zero_flow_date = 
       as.Date(ifelse(lag(flow) == 0, NA, lag(dates)),origin="1970-01-01")) %>%
  fill(non_zero_flow_date) %>%
  mutate(days.since.flow = difftime(dates, non_zero_flow_date, units = "days")) %>%
  filter(!is.na(stormMark)) %>%
  select(stormMark, days.since.flow)

#   stormMark days.since.flow
# 1         1         NA days
# 2         2          3 days

数据:

代码语言:javascript
复制
df <- read.table(text =  
"dates  station flow stormMark
1 2008-01-01 09512162  20        1
2 2008-01-02 09512162   0       NA
3 2008-01-03 09512162   5       NA
4 2008-01-04 09512162   0       NA
5 2008-01-05 09512162   0       NA
6 2008-01-06 09512162 3.5        2",
stringsAsFactors = FALSE, header = TRUE)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50769331

复制
相关文章

相似问题

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