R:向下和向上复制一种类型的组和年份的值

R: Copying value for one type of group and year downwards and upwards

我创建了一个简化版本的数据,因为我的实际数据太大,无法包含在此处。

structure(list(Name = c("A", "A", "A", "A", "B", "B", "B", "B", 
"C", "C", "C", "C"), Category = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L), Year = c(2018L, 2019L, 2020L, 2021L, 2018L, 
2019L, 2020L, 2021L, 2018L, 2019L, 2020L, 2021L), Cost = c(NA, 
100L, NA, NA, 99L, 45L, 34L, NA, 64L, 34L, NA, 34L)), class = "data.frame", row.names = c(NA, 
-12L))

这里的重点是“费用”一栏。如果有 NA,第一步,我使用最近一年的相应类别中的可用数据。

Data %>%
  group_by(`Category`, Year) %>%
  dplyr:: mutate(Cost = na.locf(Cost))

现在的问题是,对于“姓名”A,“年”2018 中没有值。这就是我收到错误的原因。我需要如何调整代码,然后在第二步中,如果没有前一年的数据可用于相应的“类别”,我将使用下一个可用年份的数据。在这种特定情况下,它将是“年”2019 和值 100。

提前感谢您的帮助。

tidyr::fill.direction = "downup" 一起使用:

library(tidyr)
library(dplyr)

Data %>% 
  group_by(Category) %>% 
  fill(Cost, .direction = "downup")

# A tibble: 12 × 4
# Groups:   Category [2]
   Name  Category  Year  Cost
   <chr>    <int> <int> <int>
 1 A            1  2018   100
 2 A            1  2019   100
 3 A            1  2020   100
 4 A            1  2021   100
 5 B            2  2018    99
 6 B            2  2019    45
 7 B            2  2020    34
 8 B            2  2021    34
 9 C            2  2018    64
10 C            2  2019    34
11 C            2  2020    34
12 C            2  2021    34