r - 填充有限数量的值 - tidyr Fill

标签 r fill tidyr

我有一个数据框,我正在使用:

df <-  data.frame(dates = seq(as.Date("2016-01-01"),as.Date("2016-01-10"), by=1)
       , category = c(rep("a",5), rep("b",5))
       , values= c(1, rep(NA,4), 5,6, rep(NA,3))) 

df %>% group_by(category) %>% fill(values)

但我希望 fill 只向前推进一定数量的地方(即如果距离初始点太远则停止向前推进)。有没有不用 for 循环的简单方法?

在这个例子中,如果日期距离最后一个非 NA 点 >2 天,我想停止填充。所以值列将是

values = c(1,1,1,NA,NA, 5,6,6,6,NA)

谢谢

最佳答案

一种方法是首先 fill(values) 然后将从最后一个非 NA 点(即 max(日期[!is.na(values)])).

library(dplyr)
library(tidyr)

df %>% 
  group_by(category) %>% 
  mutate(new_date = max(dates[!is.na(values)]), diff1 = as.numeric(difftime(dates, new_date)/(24*3600))) %>% 
  fill(values) %>% 
  mutate(values = replace(values, which(diff1 > 2), NA)) %>% 
  select(dates:values)

#Source: local data frame [10 x 3]
#Groups: category [2]

#        dates category values
#       (date)   (fctr)  (dbl)
#1  2016-01-01        a      1
#2  2016-01-02        a      1
#3  2016-01-03        a      1
#4  2016-01-04        a     NA
#5  2016-01-05        a     NA
#6  2016-01-06        b      5
#7  2016-01-07        b      6
#8  2016-01-08        b      6
#9  2016-01-09        b      6
#10 2016-01-10        b     NA

注意 difftime 给了我几秒钟,所以我手动转换为天

关于r - 填充有限数量的值 - tidyr Fill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972673/

相关文章:

html - CSS增加网站上的所有字体

r - 如何在 Plotly 中记录颜色的变换值,但在颜色条上保留原始值?

R函数返回多个数据帧

替换不完全是 10 位数字的电话号码

r - Sublime Text 2 中的自动完成 R

python - 使用字符值在 Pandas 中创建新行

css - 使用 CSS 方法如何设置图像以填充 SVG 中的路径?

r - R 中的交互式热图

r - 在 dplyr 或 tidyr 中执行类似于 rbind 的操作?

r - 基于另一列的分组扩展列(dplyr/tidyr)