Мне нужно использовать na.locf
из пакета zoo
, чтобы заменить значения NA последним наблюдаемым значением. Тем не менее, мне нужно сделать это только для конкретных c страна и переменные пары. Эти пары определяются логически с использованием отдельного фрейма данных, пример которого показан ниже.
Country <- c("FRA", "DEU", "CHE")
acctm <- c(0, 0, 1)
acctf <- c(1, 1, 0)
df1 <- data.frame(Country, acctm, acctf)
Country acctm acctf
1 FRA 0 1
2 DEU 0 1
3 CHE 1 0
a 1
, означающее использование na.locf
для этой пары. Пример набора данных, где потребуется замена, показан ниже.
Country <- c("FRA", "FRA", "DEU", "DEU", "CHE", "CHE")
Year <- c(2010, 2020, 2010, 2020, 2010, 2020)
acctm <- c(20, 30, 10, NA, 20, NA)
acctf <- c(20, NA, 15, NA, 40, NA)
df2 <- data.frame(Country, Year, acctm, acctf)
Country Year acctm acctf
1 FRA 2010 20 20
2 FRA 2020 30 NA
3 DEU 2010 10 15
4 DEU 2020 NA NA
5 CHE 2010 20 40
6 CHE 2020 NA NA
Для обоих примеров наборов данных результат выполнения функции na.locf в df2 для пар страна / переменная обозначен df1
должно выглядеть так:
acctm <- c(20, 30, 10, NA, 20, 20)
acctf <- c(20, 20, 15, 15, 40, NA)
df3 <- data.frame(Country, Year, acctm, acctf)
Country2 Year acctm acctf
1 FRA 2010 20 20
2 FRA 2020 30 20
3 DEU 2010 10 15
4 DEU 2020 NA 15
5 CHE 2010 20 40
6 CHE 2020 20 NA
Реальное приложение - это намного больший набор данных, поэтому «вызовы» должны быть обобщены. Спасибо.