R 滞后于任意数量的缺失值
R lag across arbitrary number of missing values
library(tidyverse)
testdata <- tibble(ID=c(1,NA,NA,2,NA,3),
Observation = LETTERS[1:6])
testdata1 <- testdata %>%
mutate(
ID1 = case_when(
is.na(ID) ~ lag(ID, 1),
TRUE ~ ID
)
)
testdata1
我有一个像 testdata 这样的数据集,只有当 ID 发生变化时它的 ID 才有效。一个集合中可以有任意数量的记录,但是上面的 case_when 和 lag() 结构并没有为所有记录填写ID,只为每组中的记录2填写。有没有办法让第 3 个(或更深的)ID 填充适当的值?
我们可以使用 tidyr
包中的 fill
。由于您使用的是 tidyverse
,tidyr
已包含在内。
testdata1 <- testdata %>%
fill(ID)
testdata1
# # A tibble: 6 x 2
# ID Observation
# <dbl> <chr>
# 1 1 A
# 2 1 B
# 3 1 C
# 4 2 D
# 5 2 E
# 6 3 F
或者我们可以使用 zoo
包中的 na.locf
。
library(zoo)
testdata1 <- testdata %>%
mutate(ID = na.locf(ID))
testdata1
# # A tibble: 6 x 2
# ID Observation
# <dbl> <chr>
# 1 1 A
# 2 1 B
# 3 1 C
# 4 2 D
# 5 2 E
# 6 3 F
library(tidyverse)
testdata <- tibble(ID=c(1,NA,NA,2,NA,3),
Observation = LETTERS[1:6])
testdata1 <- testdata %>%
mutate(
ID1 = case_when(
is.na(ID) ~ lag(ID, 1),
TRUE ~ ID
)
)
testdata1
我有一个像 testdata 这样的数据集,只有当 ID 发生变化时它的 ID 才有效。一个集合中可以有任意数量的记录,但是上面的 case_when 和 lag() 结构并没有为所有记录填写ID,只为每组中的记录2填写。有没有办法让第 3 个(或更深的)ID 填充适当的值?
我们可以使用 tidyr
包中的 fill
。由于您使用的是 tidyverse
,tidyr
已包含在内。
testdata1 <- testdata %>%
fill(ID)
testdata1
# # A tibble: 6 x 2
# ID Observation
# <dbl> <chr>
# 1 1 A
# 2 1 B
# 3 1 C
# 4 2 D
# 5 2 E
# 6 3 F
或者我们可以使用 zoo
包中的 na.locf
。
library(zoo)
testdata1 <- testdata %>%
mutate(ID = na.locf(ID))
testdata1
# # A tibble: 6 x 2
# ID Observation
# <dbl> <chr>
# 1 1 A
# 2 1 B
# 3 1 C
# 4 2 D
# 5 2 E
# 6 3 F