样本数据
set.seed(1)
library(tidyverse)
df1 <- data.frame(
Category = rep(c("Cat1","Cat2","Cat3"),3),
Value = c(sample(c(1:10),3), rep(NA, 6))
)
我正在尝试使用过去几年的数据滞后值播种数据框。这是问题的简化版本,但实际上,我需要做的是lag
重新使用先前计算的滞后值。如果运行以下代码,则第4-6行将按我的预期进行计算,但保留第7-9行是NA
因为lag
查找的是原始值,而不是新的计算值。我希望第7-9行也填充第4-6行的值。我知道我可以编写一个for
循环以将值向前拉,但是想看看是否有更类似于R的方式来完成此操作。
df1 %>% group_by(Category) %>%
mutate(Value = ifelse(is.na(Value), lag(Value, 1), Value))
# Groups: Category [3]
Category Value
<fct> <int>
1 Cat1 9
2 Cat2 4
3 Cat3 7
4 Cat1 9
5 Cat2 4
6 Cat3 7
7 Cat1 NA
8 Cat2 NA
9 Cat3 NA
所需结果
# A tibble: 9 x 2
# Groups: Category [3]
Category Value
<fct> <int>
1 Cat1 9
2 Cat2 4
3 Cat3 7
4 Cat1 9
5 Cat2 4
6 Cat3 7
7 Cat1 9
8 Cat2 4
9 Cat3 7
不知道这是否适用于您的问题,但是您可以使用fill
?
library(dplyr)
library(tidyr)
df1 %>%
group_by(Category) %>%
fill(Value, .direction = "down")
# A tibble: 9 x 2
# Groups: Category [3]
Category Value
<chr> <int>
1 Cat1 9
2 Cat2 4
3 Cat3 7
4 Cat1 9
5 Cat2 4
6 Cat3 7
7 Cat1 9
8 Cat2 4
9 Cat3 7
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句