gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 05:23:20 27 4
gpt4 key购买 nike

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

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com