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
我创建了一个简化版本的数据,因为我的实际数据太大,无法包含在此处。
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