年份每 12 行出现一次,但我希望所有行都出现

The year appears every 12 lines, but I want on all lines

我有一个奇怪的问题。看看df:

Year <- c(1994, rep("NA", 11),1995,rep("NA",11))
Month <-c(1:12, 1:12)

df <- data.frame(Year,Month)

年份每 12 行出现一次,但我想要在所有行中出现,例如:

Year <- c(rep(1994, 12), rep(1995,12))
Month <-c(1:12, 1:12)

df_2 <- data.frame(Year,Month)
> df_2

   Year Month
1  1994     1
2  1994     2
3  1994     3
4  1994     4
5  1994     5
6  1994     6
7  1994     7
8  1994     8
9  1994     9
10 1994    10
11 1994    11
12 1994    12
13 1995     1
14 1995     2
15 1995     3
16 1995     4
17 1995     5
18 1995     6
19 1995     7
20 1995     8
21 1995     9
22 1995    10
23 1995    11
24 1995    12

我正在尝试一种循环方法,但我无法解决这个问题。 PS: 这个 df 一直持续到 2020 年,所以月份列一直持续到 2020 年的 11 日。

如果有人能提供帮助,我将不胜感激:)

我们可以使用不带引号的 NA,并使用 fill

library(dplyr)
library(tidyr)
df %>%
   mutate(Year = na_if(Year, "NA")) %>%
   fill(Year)

-输出

#    Year Month
#1  1994     1
#2  1994     2
#3  1994     3
#4  1994     4
#5  1994     5
#6  1994     6
#7  1994     7
#8  1994     8
#9  1994     9
#10 1994    10
#11 1994    11
#12 1994    12
#13 1995     1
#14 1995     2
#15 1995     3
#16 1995     4
#17 1995     5
#18 1995     6
#19 1995     7
#20 1995     8
#21 1995     9
#22 1995    10
#23 1995    11
#24 1995    12

你可以这样在 base R 中完成:

yr <- rep(1994:2020, each = 12)
yrs <- length(1994:2020)
mth <- rep(1:12, yrs)
df <- data.frame(cbind(yr, mth))

这是包 zoo 的解决方案。

首先,使字符串"NA"真正的NA值。

is.na(df$Year) <- df$Year == "NA"

现在往下填,函数默认na.locf

df$Year <- zoo::na.locf(df$Year)