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。由于您使用的是 tidyversetidyr 已包含在内。

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