让我有这样一个数据框(df):
date x y
01-01-2016 43 14
02-01-2016 32 NA
03-01-2016 42 NA
04-01-2016 35 19
05-01-2016 45 NA
06-01-2016 65 NA
07-01-2016 39 NA
08-01-2016 39 24
我想在上面的数据框(df)中添加两个新的列(z1和z2)
date x y z1 z2
01-01-2016 43 14 14 14
02-01-2016 32 NA 14 19
03-01-2016 42 NA 14 19
04-01-2016 35 19 19 19
05-01-2016 45 NA 19 24
06-01-2016 65 NA 19 24
07-01-2016 39 NA 19 24
08-01-2016 39 24 24 24
z1规则如下:
z2规则如下:
我怎样才能在R中这样做?我会很高兴得到任何帮助。非常感谢。
答案 0 :(得分:7)
您需要前向填充(z1)和后向填充(z2);您可以使用zoo::na.locf
指定fromLast
参数执行此操作,文档如下:
逻辑。导致观察结果反过来 比前进。默认值为FALSE。值为TRUE时,这对应 到NOCB(接下来的观察结果)
library(zoo)
df$z1 <- na.locf(df$y, fromLast = FALSE)
df$z2 <- na.locf(df$y, fromLast = TRUE)
df
# data x y z1 z2
#1 01-01-2016 43 14 14 14
#2 02-01-2016 32 NA 14 19
#3 03-01-2016 42 NA 14 19
#4 04-01-2016 35 19 19 19
#5 05-01-2016 45 NA 19 24
#6 06-01-2016 65 NA 19 24
#7 07-01-2016 39 NA 19 24
#8 08-01-2016 39 24 24 24
或tidyverse
方法,fill
功能,您可以在其中指定direction
上/下:
library(tidyverse)
df %>%
mutate(z1 = y, z2 = y) %>%
fill(z1, .direction = "down") %>%
fill(z2, .direction = "up")
# data x y z1 z2
#1 01-01-2016 43 14 14 14
#2 02-01-2016 32 NA 14 19
#3 03-01-2016 42 NA 14 19
#4 04-01-2016 35 19 19 19
#5 05-01-2016 45 NA 19 24
#6 06-01-2016 65 NA 19 24
#7 07-01-2016 39 NA 19 24
#8 08-01-2016 39 24 24 24